Газировка. Часть вторая
Рассказывает Павел Герасимчук
Однажды для раздела «Газированная вода» понадобилось нарисовать несколько автоматов. Нужно выяснить, какие модели существовали и в какое время использовались.
Все автоматы должны быть в одном ракурсе, с одинаковым освещением и с сохраненными пропорциями относительно друг друга.
Поиски
Глубокобитное погружение в сеть и книги.
Материалы, которые удалось обнаружить.
Начало
После того как собраны материалы для семи автоматов, начинается этап отрисовки. Здесь главное — не торопиться и все проанализировать.
Было принято решение рисовать автоматы не по отдельности, что казалось бы более очевидным, а параллельно, шаг за шагом.
Прелесть такого подхода в том, что есть возможность доводить иллюстрации до желаемого вида сколько угодно времени, но в какой-то момент все же придется остановиться, и все автоматы будут одинаково проработаны. Проблема последовательного рисования в том, что есть шанс перегореть, доводя до ума третью картинку с мыслью о том что впереди еще четыре таких же.
Построение
Так как все автоматы должны быть в одном ракурсе, то лучше начать со «скелетов», которые рисуются в «Иллюстраторе».
Все автоматы выстраиваются в ряд и постепенно наполняются деталями: панелями, кнопками, полостями под стаканы, молдингами и так далее.
На этом этапе желательно простроить всю геометрию, чтобы в «Фотошопе» потом пришлось меньше додумывать, фокусируясь исключительно на отрисовке.
Отрисовка
Настало время «Фотошопа». Все контуры экспортируются в отдельные ПСД-файлы — для каждого автомата он свой.
По сетке рисуются короба.
АТ-2М | АТ-26 | АТ-48 |
Скелеты последовательно обрастают деталями.
Появляется намек на материалы — глянцевые и матовые поверхности.
Уточнение нюансов.
Предфинальный вариант детализации для автомата АТ-114.
И финальный вариант. Добавлены блики, свечения, освещение адаптировано под среду, доработаны рефлексы.
Рисование теней
Для создания контраста материалов поверхностей автомата и пола рисуются составные тени: после того как тень нарисована, на нее накладывается нойз с небольшим радиусом, который немного блюрится. Появляется иллюзия шероховатой поверхности.
Иллюстрации
На некоторых автоматах есть иллюстрации. Они отрисовываются и накладываются на корпуса.
Мелочи
Для оживления сцен автоматам добавляются небольшие детали.
Основные шаги процесса на примере автомата АТ-14:
Линейные иллюстрации
Дополнительно подчеркнуть причастность автомата к своему периоду помогут линейные иллюстрации предметов того времени.
Автомат будущего
Позже приходит в голову дополнить ряд автоматом будущего — как если бы их не переставали производить. Промдизайнер рисует эскизы.
По эскизам автомат отрисовывается.
youtube.com/embed/7llfvFtrPJM?rel=0″ frameborder=»0″ allowfullscreen=»»>Граненый стакан
Для страницы собираются материалы, рисуются картинки.
Как нарисовать торговый автомат в Illutrator
Сегодня мы окунемся в детство и нарисуем в Illustrator торговый автомат по продаже жевательной резинки и конфет.
Итак, на первом шаге создадим новый документ и нарисуем большой прямоугольник, примерно на 2/3 ширины листа. Через фильтр Закругленные углы сделаем необходимое нам небольшое скругление границ. Развернем вид, что бы получить новые опорные точки. (Этот шаг можно также сделать и с помощью инструмента Скругленный прямоугольник, но там может понадобиться больше времени для поиска оптимального радиуса для углов.)
После этого несколько деформируем одну часть прямоугольника, как показано на рисунке.
Отрежем недеформированный кусок (чтобы убрать скругления), продублируем получившуюся фигуру (Ctrl+C -> Ctrl+F), результат отразим зеркально и, соединив края, образуем новую симметричную фигуру.
У нас получилась основа автомата.
Шаг 2. Добавим объем
Продублируем фигуру и с помощью Пера (Р) изогнем её, как показано на рисунке. Аккуратно совместим с основой и зальем градиентом. Получился «классический» блик. Аналогичным образом сделаем загибы по краям (их зальем более темным цветом)
Третий блик сделаем с заливкой градиентом от насыщенного красного до красного с 0% прозрачностью. Если вы рисуете для стоков, то вместо прозрачности цветов градиента лучше использовать режимы наложения. Например, Умножение с заливкой от красного к белому.
Шаг 3. Стыки
Наш автомат — составная машина. Покажем стыки деталей.
Скопируем основную форму и вставим её на новый слой (Ctrl+C -> Ctrl+F). Уберем заливку и сделаем обводку черным в 2pt толщиной. В нижней части нарисуем слегка изогнутую к краям линию, а в верхней — подставку под емкость с конфетами. Её также лучше рисовать сначала только одну сторону, а потом продублировать, развернуть и соединить для симметричности.
Шаг 4. Добавим сами детали
Сгруппируем наши стыки (Ctrl+G). На панели прозрачности выберем режим Мягкий свет (Soft Light). Продублируем группу (Ctrl+C -> Ctrl+F), вернем режим смешивания на Нормальный, зальем черным и уберем обведение. Поместил на один слой ниже стыков, что бы они были видны (Ctrl+[)
Красная основа блестит, добавим блеска и на черные детали. В этом нам помогут градиенты. Выберем Частичным выделением (А) нижнюю черную деталь и зальем её градиентом от черного к серому, как показано на рисунке. В верху же нарисуем два небольших прямоугольника и зальем их градиентом с прозрачностями.
Сами же верхние части продублируем и зальем черно-серым градиентом, как и внизу, но придадим фигуре прозрачность в 45%
Шаг 5. Еще бликов!
На это этапе нарисуем пять горизонтальных прямоугольников. Будем заливать их серыми градиентами с различной прозрачностью, что бы добиться эффекта, как на рисунке.
После этого их также поместим на уровень ниже стыков.
В завершении с верхней частью добавим еще три прямоугольника, которые зальем градиентами светло-серого оттенка от 100% до 0%, выставив при этом прозрачность фигур на уровне 40%.
Шаг 6. Нижняя часть
Нам нужны блики и внизу. Создадим их по аналогии с предыдущими шагами.
Шаг 7. Центр
Сильные блики в центральной части тоже не помешают. Здесь будем использовать тонкие вертикальные прямоугольники. Градиенты будут белые от 100% до 0% и также с прозрачностью в 40%.
Шаг 8. Стеклянный контейнер
На слое ниже основы автомата нарисуем контейнер для конфет в виде прямоугольника с закругленными углами. Зальем его белым. С помощью инструмента Перо (Р) сделаем тени по бокам, аналогично сделанным ранее. Заливать их будем черным градиентом от 100% до 0%. Продублировав контейнер, уберем его заливку и сделаем обводку в 2pt с прозрачностью Мягкий свет.
Шаг 9. Крышка
Нарисуем с помощью прямоугольников две фигуры — верх крышки и её боковую часть.
С помощью Пера сдвинем опорные точки, как показано на рисунке.Боковую часть нам понадобится залить градиентом из смеси черного и серого. После этого скопируем верхнюю и боковую части, уберем их заливки, добавим обводки по 2pt и режим смешивания Мягкий свет.
И, наконец, с помощью двух горизонтальных и одного вертикального прямоугольника создадим отблески на боковой панели.
Шаг 10. Внутренняя начинка
В районе предполагаемого дна контейнера нарисуем небольшой прямоугольник, зальем его черным с прозрачностью в 25%. Сгруппируем его с боковыми градиентами.
Нарисуем эллипс. Зальем его черным. Продублируем и опустим немного ниже. Нарисуем прямоугольник, углы которого соприкасаются с точками больших радиусов наших эллипсов. Преобразуем их в одну цельную фигуру. Из её центра проведем вертикальный прямоугольник, который зальем градиентом, как на рисунке.
По желанию можно добавить деталей и полутеней.
Шаг 11. Конфеты!
Время рисовать сладости. Создадим окружность. Дважды продублируем её. Вторую копию несколько сместим вверх и влево, после чего Вычтем ей из первой копии. Получившийся результат зальем более градиентом, в тон основной окружности, но более темным.
Еще раз вставим окружность. На этот раз она будет без заливки, но с обводкой в 0,5pt. И еще раз продублируем, но с обводкой в 2pt и смешиванием Мягкий свет.
В центре конфеты нарисуем небольшую окружность и зальем её градиентом красного от 100% до 0%, а также добавим два маленьких белых кружка — блики.
Сгруппируем и продублируем столько раз, сколько мы хотим иметь разных цветов для конфет. Теперь для каждой копии с помощью Перекрашивания подберем нужные оттенки.
Заполним наш ящик конфетами, а на передний план поставим несколько косых прямоугольников, которые зальем градиентом, как на рисунке.
Шаг 12. Монетоприемник
Мы уже близки к завершению. К сожалению, автоматы бесплатно конфеты не дают. Так что нарисуем монетоприемник.
Для этого нарисуем скругленный прямоугольник и зальем его темным градиентом. Внутри нарисуем еще один, сильно скругленный прямоугольник. Зальем его черным. Сделаем копию, которая будет иметь обводку в 2pt со смешиванием Мягкий свет.
Нарисуем прямоугольник, проходящий через середину сильно скругленной фигуры и Поделим их. Получившийся результат зальем темным градиентом.
Добавим бликов, а также черную хитрую фигуру с заливкой черным и прозрачностью в 25%
Шаг 13. Поворотный механизм
По образу и подобию предыдущего шага создадим поворотный механизм. Нарисуем скругленный прямоугольник. За счет обводок и градиента добавим ему объема. Посредине нарисуем меньший прямоугольник и повторим процедуру. Добавим бликов.
Шаг 14. Последний
Добавим фон на задний план для красоты. Нарисуем прямоугольник на фоне коробки с конфетами. Зальем его цветом фона и поставим на задний план или же Вырежем с его помощью кусок из Базовой формы коробки. Теперь она у нас прозрачная.
Наш автомат по продаже жевательной резинки и конфет готов!
По материалам Mary Winkler
конечных автоматов.
Может ли кто-нибудь подробно объяснить мне, как рисовать диаграмму перехода (DFA/NFA) в теории информатики?Вам нужно просто выполнить условия типа if-elseif, чтобы вывести DFA из таблицы.
DFA: т. е. детерминированные конечные автоматы, в которых решение для любого входа должно быть детерминированным, т. е. должно быть подтверждение о выходе на конкретном входе. Таким образом, он имеет только одно состояние в качестве вывода для определенного ввода.
NFA: т. е. недетерминированные конечные автоматы, в которых решение для любого ввода может не быть детерминированным, т. е. может не быть подтверждения о выходе на конкретном вводе. Таким образом, он может иметь одно или несколько состояний в качестве вывода для определенного ввода.
- Возьмем пример построения диаграммы DFA:
Предположим, у вас есть таблица переходов, заданная как:
Знак → указывает начальное состояние: здесь q0
Знак ∗ указывает конечное состояние (состояния) (здесь только одно конечное состояние q1)
Диаграмма DFA для этой таблицы будет следующей:
Объяснение :
Из таблицы видно, что из начального состояния, т. е. A, когда вы получаете символ 0 в качестве входных данных, вы должны перейти в состояние C, и когда вы получите на входе символ 1, вы должны перейти в состояние B.
Итак, на диаграмме мы показываем стрелки между двумя состояниями в соответствии с символом.
Таким образом, мы переходим к B, и таблица показывает, что при вводе символа 0 переходим в состояние C, а при вводе символа 1 переходим в состояние B. Таким образом, вы рисуете две стрелки в соответствии с этим.
Начиная с C, по символу 0 в качестве ввода переходите в состояние C, а при вводе символа 1 переходите в состояние D, то есть в конечное состояние. Таким образом, вы рисуете две стрелки для этого.
Снова тот же процесс выполняется для D.
ПРИМЕЧАНИЕ. Чтобы показать состояние как начальное, вы добавляете стрелку за кругом, обозначающим первое состояние, а для обозначения состояния как конечного состояния вы рисуете круг внутри другого, как показано на рисунке.
- Возьмем другой пример построения диаграммы NFA:
Предположим, у вас есть таблица переходов, заданная как:
Диаграмма NFA для таблицы может быть построена как:
Вы можете легко понять концепцию, поскольку концепция здесь такая же, как и построение диаграммы DFA. Разница здесь в том, что на одном входе может быть несколько выходных состояний; поэтому вам нужно нарисовать стрелку для каждого из выходных состояний.
DFA для строк, начинающихся с 0 и заканчивающихся на 1:
Построение:
Начертить окружность исходного состояния 1.
Поскольку строка должна начинаться с 0, поэтому при получении 0 в качестве входных данных переход должен продолжаться со следующим состоянием 2, так как наш первый случай здесь удовлетворяет. Так что сделайте новый кружок состояния 2 и покажите 0 в качестве ввода на стрелке между обоими состояниями.
Но проблема в том, что когда вы получаете ввод 1, то ваши оба случая (0 должен быть первым вводом, а 1 должен быть последним) теперь никогда не могут быть удовлетворены. Итак, для этого сделайте еще одно состояние 3 кружком для входа 1 и покажите стрелку к этому состоянию, которое переходит в то же состояние 3 на входе 1 и 0. Поскольку ваши условия никогда не могут быть удовлетворены сейчас, поэтому вы оставляете свое состояние 3 здесь, показывая петля к себе.
Теперь давайте перейдем к состоянию 2. Когда вы получаете ввод как 0, вы должны показать цикл до самого состояния-2, потому что ваше конечное условие, т. е. «1 должна быть в конце строки», не удовлетворяет на получение 0 в качестве ввода ->, поэтому вы не можете перейти в конечное состояние для этого.
Но когда вы получаете ввод 1 в состоянии-2, тогда вы получаете оба условия (0 должен быть первым вводом, а 1 должен быть последним), удовлетворяют. Таким образом, вы делаете стрелку в конечное состояние-4 для ввода 1 в состоянии-2.
Теперь в конечном состоянии, т.е. в состоянии-4, вы все еще можете получить ввод, поскольку длина строки не указана. Таким образом, вы все еще можете получить входы 1 и 0.
Когда вы получаете ввод как 1 в конечном состоянии, тогда ваша строка теперь будет примерно 011, поэтому ваши оба условия теперь удовлетворяют, поэтому вы делаете цикл до конечного состояния на входе 1.
Но когда вы получаете ввод как 0 в конечном состоянии, т. Е. Состояние-4, тогда ваша строка будет примерно 010, тогда ваше одно условие, т. е. «1 должен быть последним элементом строки», не удовлетворяет, тогда вы делаете переход из состояния -4 в состояние-3, так как это единственное состояние, которое может решить проблему получения 1 в конце строки.
Надеюсь, теперь вы поняли концепцию, и она вам поможет!
Автоматы с конечным состоянием
Автоматы с конечным состоянием Пакет макросов PostScript для рисования диаграмм конечного состояния АвтоматыПример кода PostScript
- автомат.пс
- lowres.ps — аналогично первому, но использует немного большие шрифты для устройств с низким разрешением
Чертеж автомата
Файл с примером кода содержит все определения PostScript, необходимые для нарисовать конечный автомат. Просто сделайте копию и измените под свои нужды как описано ниже. Результат можно использовать как Encapsulated PostScript.Настройка параметров
Начало файла содержит некоторые настройки, которые необходимо настроить для личных целей. вкус:
/NodeR 20 def % Радиус окружности узла /ENodeR NodeR 0,8 mul def % Радиус внутренней окружности конечного узла /LoopR NodeR 4 mul def % Радиус дуги петли /LoopW 30 def % Ширина дуги петли (градусы) /NodeW 2 def % Ширина линии окружности узла /ENodeW 1 def % Ширина линии внутреннего круга конечного узла /LineW 1 def % Ширина линии для дуг /Color true def % Должны ли мы использовать цвета заливки?
Определение автомата
После множества определений подпрограмм определяется фактический автомат. в последнем разделе файла:
%%%%%%%% КОНЕЦ ЗАГОЛОВКА %%%%%%%% petersFSA начатьОпределение автомата здесь
конец выставочная страница %%EOFУбедитесь, что вы не удалили строки, показанные выше.
Первое, что нужно сделать , это указать, какие узлы использовать и где размещать. их в координатном пространстве PostScript. В этом примере определяются два узла:
/q0 [ 100 600 ] деф /q1 [ 180 700 ] дефДалее, узлы должны быть нарисованы. Командный узел принимает четыре аргумента: узел, как определено выше, и красный, зеленый и значение синего цвета. Эти значения цвета используются для заполнения узла. Следующий пример рисует узел q0 с желтым цветом заливки, а узлы с q1 по q4 с голубым цветом заливки:
q0 1 1 0 узел [ q1 q2 q3 q4 ] { 0 1 1 узел } для всехЕсли отключить цвета заливки (см. Настройка параметров ) ты еще должны предоставить значения цвета.
Далее, отметить узел как начальный узел:
q0 180 начальный узелЗначение 180 указывает, что метка должна быть на 180 градусов, то есть влево.
Далее, отметить один или несколько узлов как конечный узел:
[ q2 q4 ] { конечный узел } для всехДалее, поместите метки внутри узлов:
q0 amoveto [ (q) Rm (0) Sub ] Центральный текст q1 amoveto [ (q) Rm (1) Sub ] Центральный текстВот описание того, что делает код между угловыми скобками:
Сначала определяется фрагмент текста, как в (q). В PostScript все
строки заключаются в круглые скобки.
Ниже приводится ключевое слово Rm. Это значит поставить предыдущее
текст обычным шрифтом Roman .
Определен еще один фрагмент текста, за которым следует ключевое слово Sub.
Это указывает на то, что текст должен быть набран в виде нижнего индекса.
Ключевое слово Super можно использовать для набора текста в виде
верхний индекс. Другими ключевыми словами являются Sym (используйте символьный шрифт) и
Овл (надчеркнутый текст).
Странный выбор опций, текст подчеркнут,
но нет подчеркнутого текста? Ну… это то, что мне действительно было нужно, когда я
написал это 😉
После закрывающей угловой скобки стоит ключевое слово Centre. Этот
означает, что текст между угловыми скобками в целом должен быть центрирован.
В текстах могут использоваться все символы из ISO Latin. 1 набор символов. Чтобы распечатать символ с диакритическим знаком, используйте обратную косую черту, за которой следует его трехзначный восьмеричный код. Пример: \306 напечатает `Æ’.
Далее, рисуем дуги между узлами. Некоторые примеры:
q0 q1 20 .25 трансЭто нарисует дугу от узла q0 к узлу q1 в угол 20 градусов от воображаемой прямой, соединяющей два узлы. Угол должен быть в пределах от -120 до 120 градусов.
Значение четвертого аргумента, значение .25, будет объяснено позже.
Другой пример:
q2 q2 90 .5 трансПоскольку начальный и конечный узлы идентичны, это нарисует дугу петли из узел на себя. В этом случае третий аргумент имеет другое значение. значение. Он определяет, в какой позиции должна быть нарисована дуга. Значение 90 градусов приведет к тому, что дуга будет нарисована в верхней части узла.
Еще два примера:
q0 q2 0,5 истинный истинный переход q4 q4 270 .5 ложный ложный переходПредыдущие дуги всегда заканчивались стрелкой во втором узле. Эти двое примеры, используя команду перехода вместо Команда trans использует два дополнительных параметра: два логических значения. сначала указывает, рисовать ли стрелку в начальном узле, второй для конечного узла.
Наконец, этикетки можно поставить возле дуг.
Четвертый аргумент транса и перехода команды определяет позицию. Это должно быть значение от 0 до 1. Когда дуга рисуется, текущая точка устанавливается где-то вдоль дуги. Значение 0 поместит его в начальную точку, значение 1 в конец. точка, значение 0,5 (наиболее полезное) в середине.
Каждая команда «trans» или «transition» будет сдвигать текущая точка в новое место. Итак, поставив метку возле дуги должно быть сделано сразу после рисования дуги:
q0 q1 20 .5 транс [ (A) Rm ] Северо-западный путтекст q1 q0 20 .5 trans [ (B) Rm ] SouthEast puttextЗдесь снова используется команда puttext. (вначале он использовался для поместите метки внутри узлов.) Ключевое слово, следующее за закрывающим углом скобки указывают, где относительно currentpoint текст должен быть помещать. Допустимые ключевые слова: Center (используются при размещении меток внутри узлов), Север восток юг запад, Северо-Восток, Северо-Запад, Юго-Восток и Юго-Запад.
Когда все сделано , код нужно протестировать, например с помощью программы GV, Ghostview или GSView. Положения узлов могут быть не оптимальными, угол дуг, положение меток относительно дуг и т. д.
Важно: Не забудьте настроить BoundingBox значения во второй строке файла. Они должны быть в порядке: X слева поле, Y нижнего поля, X правого поля, Y верхнего поля. Правильный значения необходимы, если вы собираетесь импортировать фигуру в другую документ, например файл LaTeX, с помощью команды \psfig. Используйте ГВ, Ghostview или GSView для определения правильных значений.