Артем Герич

§ 189. Плоттер. Часть первая.

26 января 1999
Плоттеры появились, прежде чем красивые лазерные и струйные принтеры. И тем не менее, они возвращаются как музыка 80-х , на этот раз в пересечении механики, кода и искусства.
По сравнению с принтерами, которые быстрее, плоттеры нужны где требуется результат сравнимый с ручным. В отличие от типичного принтера, плоттер производит отпечатки с необыкновенно человеческим качеством: иногда возникают несовершенства, поскольку перо захватывает край или на мгновение высыхает, а качество чернил имеет тонкую текстуру и тиснение, которые вы обычно видите только в оригинальном человеческом рисунке.
Эта я машина, открывает новый мир мышления. Плоттер — это аппарат, который действует как роботизированная рука, на которую вы можете прикрепить обычную ручку. Программное обеспечение отправляет команды устройству, чтобы поднять, переместить и опустить его части на 2D-поверхность. Благодаря этому плоттер может быть запрограммирован на создание сложных и точных чертежей с ручкой и бумагой по вашему выбору.
Обычно плоттер работает с векторными координатами, и в конечном итоге все это сводится в линейные сегменты. Что касается структур данных, на них можно смотреть таким образом. Точка является координатой (x, y). Путь — упорядоченная последовательность точек. И чертеж — это набор путей, которые рисуем (обычно порядок рисования не имеет значения).
Сервомотор позволяет перемещать пишущее перо в определенном вертикальном положении, но также можно думать об этом как о двоичном: вверх (не рисование) или вниз (рисунок). Представить себе попытку изменить давление в ручке, очень сложно без идеально ровной и параллельной поверхности, и между касанием и полным касанием очень мало моторного разрешения.
Сейчас во времена тотального ускорение, когда время затраченное на чертеж имеет значение, требуется новые алгоритмы построение изображений и новые идеи.
Новые Алгоритмы Во-первых, нужно переупорядочить пути таким образом, чтобы движение без рисования было минимизировано. Это в основном проблема пути, которая не может быть решена в общем случае. Но минимальное решение работает достаточно хорошо. Нужно начать с правильного пути и прочертить его. Затем найти ближайший неиспользованный путь и прочертить его. Повторение.
ближайшая конечная точка. Представьте себе, что нужно нарисовать кучу параллельных линий, начиная с X = 0 и заканчивая на X = 1, при разных значениях Y. Наиболее эффективно будем рисовать линию от 0 до 1 и каждый раз набирать следующий от 1 до 0, поочередно. Чтобы эффективно вычислить это упорядочение, предлагаю пространственный хэш-индекс.
Соединение путей Как только заканчиваются пути, можно объединить последовательные пути, конечные точки которых находятся в пределах некоторого допуска. Таким образом, если путь A заканчивается очень близко к тому, где начинается путь B (в пределах диаметра наконечника пера), не нужно беспокоиться, поднимая ручку. Это может также сэкономить много времени, в зависимости от характера рисунка. Это тривиально реализовать.
Упрощение путей После того, как разобрались и присоединили к пути, теперь возможно упростить их, опять же, до некоторого определенного допуска. Алгоритм Алгоритм Рамера — Дугласа — Пекера. Это простой способ реализовать упрощение полилинии. Это уменьшает объем данных, которые необходимо отправить на плоттер. Но что более важно, это улучшает результаты алгоритма планирования движения.

Хозяйке на заметку

Суть алгоритма состоит в том, чтобы по данной ломаной, аппроксимирующей кривую, построить ломаную с меньшим числом точек. Алгоритм определяет расхождение, которое вычисляется по максимальному расстоянию между исходной и упрощённой кривыми. Упрощенная кривая состоит из подмножества точек, которые определяются из исходной кривой.
Начальная кривая представляет собой упорядоченный набор точек или линий, и заданное расстояние ε > 0. Начальная кривая показана на рисунке 0, упрощённая — на рисунке 4.
Алгоритм рекурсивно делит линию. Входом алгоритма служат координаты всех точек между первой и последней. Первая и последняя точка сохраняются неизменными. После чего алгоритм находит точку, наиболее удалённую от отрезка, соединяющего первую и последнюю. Если точка находится на расстоянии, меньшем ε, то все точки, которые ещё не были отмечены к сохранению, могут быть выброшены из набора и получившаяся прямая сглаживает кривую с точностью не ниже ε
Если же расстояние больше ε, то алгоритм рекурсивно вызывает себя с на наборе от начальной до данной и от данной до конечной точках (что означает, что данная точка будет отмечена к сохранению).
По окончанию всех рекурсивных вызовов выходная ломаная строится только из тех точек, что были отмечены к сохранению.
Физический генеративный код За последние годы люди открывали способы создания физических выходов из генеративного кода. Их интересует идея создания реальных, осязаемых объектов, которые больше не связаны порождающими системами, которые формировали их. В конце концов это перейдет на 3D-печать, лазерной резку, фрезерованием с ЧПУ и другими способами в реальном мире.
Часто эти плоттеры и механические устройства контролируются такими форматами, как HP-GL или G-код. Эти форматы определяют, как машина должна подниматься, перемещаться и размещаться со временем.
Такие машины очень хорошо подходят для программного и алгоритмического линейного искусства, поскольку она может работать в течение нескольких часов за раз и производить невероятно подробные результаты, которые было бы слишком утомительно для иллюстрации вручную.
Это не новая концепция; Вера Мольнар, ранний пионер в области компьютерного искусства, занималась этим еще в 1960-х годах!
— Вера Молнар, 1968