что такое параллельные кривые

Построение параллельных кривых в картографических веб-приложениях

В ходе работы над веб-картой в рамках проекта возникла задача отображения линий метрополитена на карте. Казалось бы, что в этом сложного? По сути — ничего, пока вам не требуется визуализировать различные маршруты, физически проходящие по одному месту. С такой ситуацией мы столкнулись при попытке отобразить линии амстердамского метрополитена.

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Первая мысль, которая приходит в голову — это просто продублировать те сегменты, по которым проходит несколько маршрутов, немного сдвинув их друг относительно друга, меняя географические координаты. Однако в результате подобного действия мы получаем линии, которые на мелких масштабах сливаются друг с другом, а на крупных, наоборот, разлетаются в разные стороны, то есть, глядя на подобную карту, невозможно понять, что указанные маршруты физически проходят по одному месту.

Более правильный способ заключается в том, что сдвиг линий относительно друг друга должен задаваться в пикселах с учётом толщины линий. Приблизительный порядок действий должен быть следующим:

Вычисление координат сегмента, сдвинутого относительно базового на определённое расстояние по сути является задачей нахождения параллельной кривой.

Поскольку в веб-карте проекта «Метро для всех» используется картографическая библиотека Leaflet, то было решено попробовать найти какой-нибудь плагин для построения параллельных кривых. И такой плагин нашёлся — Leaflet.PolylineOffset, пример.

На тестовом наборе данных всё выглядит довольно неплохо. Однако при попытке отрисовать реальные данные (линии метрополитена) возник ряд неприемлемых артефактов (вылеты линий за пределы экрана, исчезновение линий на определённых масштабных уровнях), в связи с чем была принята попытка поиска альтернативного способа нахождения параллельных кривых.

Стоит отметить, что во время написания данной статьи, в код Leaflet.PolylineOffset был добавлен коммит #e2166fa, устраняющий большинство из вышеописанных артефактов. Однако проблемы с отображением сегментов на мелком масштабе остались.

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые
Артефакты при использовании плагина Leaflet.PolylineOffset

Если посмотреть код Leaflet.PolylineOffset, то становится понятно, что это легковесный плагин, реализующий в том числе и всю математику по расчету параллельных кривых. Однако нахождение параллельных кривых — это отнюдь не тривиальная задача, более того, подобной функции нет даже в JTS Topology Suite. Вот что говорит об этом один из основных разработчиков JTS Topology Suite Martin Davis:

In fact my original goal was to develop an offset line algorithm, but it turned out to be quite tricky to implement. I’m still thinking about doing offset lines, though.

Поэтому есть все основания не доверять тому алгоритму, который используется в Leaflet.PolylineOffset.

К сведению: реализация функции нахождения параллельных кривых имеется в библиотеке GEOS, код.

Одна из наиболее известных и функциональных библиотек на JavaScript, предназначенных для выполнения всевозможных пространственных операций над объектами в двумерном пространстве — JSTS Topology Suite. Это JavaScript порт упомянутой выше библиотеки JTS Topology Suite. Однако, как уже отмечалось, в JTS Topology Suite нет функции построения параллельных кривых, поэтому нет его и в JSTS Topology Suite. Можно было бы, конечно, разобраться в алгоритме, реализованном в GEOS и перенести его на JavaScript, используя соответствующие функции JSTS Topology Suite, но мы рассмотрим другой вариант, не столь точный, но как показала практика — вполне достаточный для решения конкретной задачи: визуализировать различные маршруты, физически проходящие по одному месту, без ощутимых артефактов. Не факт, что описанный ниже алгоритм будет приемлемо работать с другим набором данных, но все равно — будет хотя бы какая-то отправная точка.

В JSTS Topology Suite есть возможность построения одностороннего буфера (в ту или иную сторону в зависимости от знака). Пример построения одностороннего буфера (синяя линяя — внешнее кольцо построенного полигона, зелёная — исходная линия):

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые
Односторонний буфер

Также в JSTS Topology Suite есть возможность построения «сырой» параллельной кривой (допускающей самопересечения). Пример построения такой кривой (черная линия — «сырая» кривая, красные точки — её узлы):

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые
«Сырая» параллельная кривая

Итоговую параллельную кривую (голубая) будем набирать из узлов «сырой» кривой, касающихся внешнего кольца одностороннего буфера:

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые
Итоговая параллельная кривая

Код получившейся функции расчета параллельной кривой:

Код всего модуля модуля можно взять на гитхабе. Чтобы склонировать его себе, выполните команду:

Там же есть и примеры использования.

В итоге мы получили результат, который на определенном масштабном уровне также содержит небольшие артефакты, но уже не в том количестве, как Leaflet.PolylineOffset. Никаких вылетов и исчезновений линий не наблюдается.

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые
Результат

Источник

параллельные кривые

Смотреть что такое «параллельные кривые» в других словарях:

Кривые второго порядка — Кривая второго порядка геометрическое место точек, декартовы прямоугольные координаты которых удовлетворяют уравнению вида a11x2 + a22y2 + 2a12xy + 2a13x + 2a23y + a33 = 0, в котором по крайней мере один из коэффициентов отличен от нуля.… … Википедия

ЛЯПУНОВА ПОВЕРХНОСТИ И КРИВЫЕ — класс поверхностей и кривых, обладающих достаточно хорошими свойствами гладкости, введенный в теории потенциала А. М. Ляпуновым в кон. 19 нач. 20 вв. Поверхность Sв трехмерном евклидовом пространстве R3 наз. поверхностью Ляпунова, если выполнены… … Математическая энциклопедия

Кривая Безье — Кривые Безье или Кривые Бернштейна Безье были разработаны в 60 х годах XX века независимо друг от друга Пьером Безье (Pierre Bézier) из автомобилестроительной компании «Рено» и Полем де Кастельжо (Paul de Faget de Casteljau) из компании «Ситроен» … Википедия

Параллельная кривая — Эллипс (показано красным), его эволюта (синий) и несколько параллельных кривых (зеленый). Обратите внимание как изламываются параллельные кривые, касающиеся эволюты … Википедия

НЕЕВКЛИДОВА ГЕОМЕТРИЯ — геометрия, сходная с геометрией Евклида в том, что в ней определено движение фигур, но отличающаяся от евклидовой геометрии тем, что один из пяти ее постулатов (второй или пятый) заменен его отрицанием. Отрицание одного из евклидовых постулатов… … Энциклопедия Кольера

Кривая второго порядка — Кривая второго порядка геометрическое место точек, декартовы прямоугольные координаты которых удовлетворяют уравнению вида в котором по крайней мере один из коэффициентов отличен от нуля. Содержание 1 История 2 … Википедия

Кривая 2-го порядка — Кривая второго порядка геометрическое место точек, декартовы прямоугольные координаты которых удовлетворяют уравнению вида a11x2 + a22y2 + 2a12xy + 2a13x + 2a23y + a33 = 0, в котором по крайней мере один из коэффициентов отличен от нуля.… … Википедия

Фокальная ось — Кривая второго порядка геометрическое место точек, декартовы прямоугольные координаты которых удовлетворяют уравнению вида a11x2 + a22y2 + 2a12xy + 2a13x + 2a23y + a33 = 0, в котором по крайней мере один из коэффициентов отличен от нуля.… … Википедия

Фокальная хорда — Кривая второго порядка геометрическое место точек, декартовы прямоугольные координаты которых удовлетворяют уравнению вида a11x2 + a22y2 + 2a12xy + 2a13x + 2a23y + a33 = 0, в котором по крайней мере один из коэффициентов отличен от нуля.… … Википедия

Фокальный параметр — Кривая второго порядка геометрическое место точек, декартовы прямоугольные координаты которых удовлетворяют уравнению вида a11x2 + a22y2 + 2a12xy + 2a13x + 2a23y + a33 = 0, в котором по крайней мере один из коэффициентов отличен от нуля.… … Википедия

ГЕОМЕТРИЯ — раздел математики, занимающийся изучением свойств различных фигур (точек, линий, углов, двумерных и трехмерных объектов), их размеров и взаимного расположения. Для удобства преподавания геометрию подразделяют на планиметрию и стереометрию. В… … Энциклопедия Кольера

Источник

Кривые Безье и Пикассо

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Пабло Пикассо в своей студии на фоне картины «Кухня», фотография Херберта Листа.

Художник и простота

Одни из самых любимых мной работ Пабло Пикассо — это его линейные рисунки. Он изобразил на некоторых из них животных: сову, верблюда, бабочку и т.д. Эта работа под названием «Собака» висит на моей стене:

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

(Можете перейти к интерактивному демо, в которой мы воссоздали «Собаку» с помощью представленных в статье математических расчётов)

Эти рисунки чрезвычайно просты, но каким-то образом им удаётся глубоко тронуть зрителя. Они создают впечатление простоты композиции и реализации. Одно движение руки и подпись создают настоящий шедевр! Рисунок одновременно кажется и небрежной импровизацией, и точно подобранной увертюрой в симфонии изящества. На самом деле мы знаем, что процесс работы Пикассо был глубоким. Например, в 1945-1946 годах Пикассо создал серию из одиннадцати рисунков (литографий, если точнее), демонстрирующих его постепенный прогресс в визуализации быка. Первые были более-менее похожи на реалистичные, но в дальнейшем мы видим, как бык превращается в саму свою сущность, а последний рисунок состоит всего из десятка линий. В процессе развития серии рисунков мы видим быка, напоминающего некоторые из других работ Пикассо (номер 9 напоминает мне скульптуру в чикагском Daley Center Plaza). Здесь можно подробнее прочитать о серии литографий.

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

«Бык» Пикассо. Фотография сделана Джереми Куном в Институте искусств в Чикаго. Нажмите на изображение, чтобы увеличить его.

Я не буду притворяться опытным художником (я не смог бы нарисовать быка, даже если бы от этого зависела моя жизнь), зато я могу распознать математические аспекты его картин и написать чертовски хорошую программу. Есть один очевидный способ рассмотрения линейных рисунков в стиле Пикассо как математических объектов, и это конечно же кривые Безье. Давайте начнём с изучения теории кривых Безье, а потом напишем программу для их отрисовки. Используемая в ней математика не требует никаких дополнительных знаний, кроме основ алгебры и полиномов, и я постараюсь как можно меньше вдаваться в сложные подробности. Мы изучим очень простой алгоритм рисования кривых Безье, реализуем его на Javascript, а затем воссоздадим один из линейных рисунков Пикассо с помощью нескольких кривых Безье.

Кривые Безье и параметризация

Когда кто-нибудь просит вспомнить «кривые», большинство людей (возможно, отравленных преподаванием основ математики) или начинает трястись от страха, или рисует часть графика многочлена. Хотя это вполне правильные и уважаемые кривые, но они представляют лишь небольшую часть мира кривых. Особенно нас интересуют кривые, которые не являются частью графиков функций.

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Например, лекало — это физический шаблон, используемый для (ручного) рисования плавных кривых. Просто соединяя рёбрами любую часть этих кривых, мы обычно не можем получить график функции. Очевидно, что нам нужна более общая идея о том, что же такое кривые. Проблема в том, что в разных областях математики под «кривой» подразумеваются различные понятия. Кривые, которые мы будем изучать, называемые «кривыми Безье» — это особый случай полиномиальных плоских кривых с одним параметром. Это звучит слишком сложно, но на самом деле это означает, что всю кривую можно задать двумя многочленами: одним для значений что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи вторым для значений что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Оба многочлена имеют одну переменную, которую мы назовём что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые( что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеопределена на множестве вещественных чисел).

На примере всё должно стать понятнее. Давайте подберём два простых многочлена от что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, допустим, что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Если мы хотим найти точки на этой кривой, мы просто выбираем значения что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи подставляем их в оба уравнения. Например, подставив что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, мы получим точку что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыена кривой. Располагая все такие значения на графике, мы получим кривую, которая точно не является графиком функции:

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Но очевидно, что мы можем записать любую функцию с одной переменной что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыев таком параметрическом виде: просто выберем что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Итак, они на самом деле являются более общими объектами, чем обычные функции (однако в этой статье мы будем работать только с многочленами).

Вкратце повторим: полиномиальная плоская кривая с одним параметром задаётся как пара многочленов что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеот одной переменной что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Иногда, когда нам нужно выразить всю систему одним уравнением, мы можем взять коэффициенты общих степеней что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи записать их как векторы что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Благодаря приведённому выше примеру что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыемы можем переписать это как что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые.

Здесь коэффициенты — это точки на плоскости (те же, что и векторы), и мы выделяем функцию что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыежирным, чтобы подчеркнуть, что выходные данные являются точкой. Изучающие линейную алгебру могут понять, что пары многочленов формируют линейное пространство, и скомбинировать их как что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Но для нас удобнее будет воспринимать точки как коэффициенты одного многочлена.

Мы также ограничим наше внимание рассмотрением однопараметрических плоских кривых, описываемых полиномом, для которых переменная что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыедопускается на интервале от нуля до единицы. Такое ограничение может показаться странным, но на самом деле так может быть записана любая конечная однопараметрическая плоская кривая, описываемая полиномом (мы не будем вдаваться в подробности того, как это реализуется). Ради краткости далее я буду называть однопараметрическую плоскую кривую, определяемую полиномом, у которой что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыенаходится в интервале от нуля до единицы, просто «кривой».

С этими кривыми мы можем делать очень интересные вещи. Например для любых двух точек в плоскости что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыемы можем описать прямую между ними как кривую: что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. И в самом деле, при что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыезначение что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеточно равно что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, при что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеточно равно что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, и уравнение является линейным полиномом при что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Более того (если не вдаваться в подробности матанализа), линия что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыепроходит с «единичной скоростью» от что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыедо что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Другими словами, мы можем воспринимать что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыекак описывающую движение частицы из что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыепо времени, и во время что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыечастица пройдёт путь на четверть, а во время что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыепройдёт половину пути, и т.д. (Примером прямой, не имеющей единичную скорость, является, например что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые.)

Для более общего случая давайте добавим третью точку что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Мы можем описать путь, проходящий через что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыев что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, и он «направляется» точкой что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, лежащей посередине. Эта идея «направляющей» точки немного абстрактна, но в отношении вычислений не более сложна. Вместо движения из одной точки в другую с постоянной скоростью, мы хотим двигаться из одной линии к другой с постоянной скоростью. То есть мы можем назвать две кривые, описывающие прямые из что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыекривыми что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Тогда кривая, «направляемая» точкой что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, может быть записана как кривая

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Выполнив все эти умножения, мы получим формулу

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

С течением времени точка что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыедвижется вдоль прямой между точками что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, которые также движутся. Так мы получаем кривую, которая выглядит следующим образом

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Этот скриншот взят из потрясающего демо консультанта по визуализации данных Джейсона Дейвиса. Он идеально демонстрирует математическую идею. В демо можно перетаскивать все три точки, чтобы посмотреть, как это влияет на конечную кривую. Стоит поиграть с ней хотя бы пять минут.

Вся идея кривых Безье заключается в обобщении этого принципа: имея список точек что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыена плоскости, мы хотим описать кривую, которая проходит от первой до последней точки, и «направляется» между остальными точками. Кривая Безье является реализацией такой кривой (однопараметрической плоской кривой, определяемой полиномом), которая становится индуктивным продолжением описанного выше: мы движемся с единичной скоростью из кривой Безье, заданной первыми что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеточками списка до кривой, заданной последними что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеточками. В простейшем случае это отрезок прямой линии (или единственная точка, если угодно). С формальной точки зрения,

Определение: для заданного множества точек на плоскости что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыемы рекурсивно определяем кривую Безье степени что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыекак

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Мы назовём что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеконтрольными точками что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые.

Хотя концепция перемещения с единичной скоростью между двумя кривыми Безье более низкого порядка является настоящей сутью дела (и позволяет нам подойти с к решению с вычислительной точки зрения), можно просто всё это перемножить (с помощью формулы биномиальных коэффициентов) и получить формулу в явном виде. Она будет следующей:

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Например, кубическая кривая Безье с контрольными точками что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыебудет иметь уравнение

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Кривые Безье более высокого порядка может быть достаточно сложно отобразить геометрически. Например, ниже показана кривая Безье пятой степени (с шестью контрольными точками).

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Кривая Безье пятой степени, иллюстрация из Википедии.

Отрисованные дополнительные отрезки прямых демонстрируют рекурсивную природу кривой. Самые простые — зелёные точки, перемещающиеся между контрольными точками. Синие точки перемещаются по отрезкам прямых между зелёными точками, розовые перемещаются по отрезкам между синими, оранжевые — между розовыми, и, наконец, красная точка перемещается по отрезку прямой между оранжевыми точками.

Без рекурсивной структуры задачи (просто из наблюдения за кривой) было бы сложно понять, как можно всё это вычислить. Но как мы увидим, алгоритм отрисовки кривой Безье очень естественен.

Кривые Безье как данные и алгоритм де Кастельжо

Давайте выведем и реализуем алгоритм отрисовки кривой Безье на экране, воспользовавшись исключительно возможностью рисования прямых линий. Для простоты мы ограничимся рассмотрением только кривых Безье третьей степени (кубических). И в самом деле, любая кривая Безье по рекурсивному определению может быть записана как сочетание кубических кривых, и на практике кубические кривые обеспечивают баланс между эффективностью вычислений и выразительностью. Весь код в этом посте написан на Javascript и выложен на странице этого блога на Github.

Итак, кубическая кривая Безье представляется в программе списком из четырёх точек. Например,

В большинстве графических библиотек (в том числе в стандартной HTML5 canvas) существует графический примитив, способный выводить кривые Безье на основании списка из четырёх точек. Но предположим, что у нас нет такой функции. Предположим, что мы можем рисовать только прямые линии. Как же мы можем нарисовать аппроксимацию кривой Безье? Если такой алгоритм существует (а он есть, и мы убедимся в этом), то мы можем создать настолько точную аппроксимацию, что она будет визуально неотличима от истинной кривой Безье.

Важнейшее свойство кривых Безье, которое позволит нам создать такой алгоритм, заключается в следующем:

Любую кубическую кривую Безье что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеот начала до конца можно разделить на две, которые вместе будут описывать ту же кривую, что и что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые.

Давайте посмотрим, как же это сделать. Пусть что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыебудет кубической кривой Безье с контрольными точками что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, и допустим, что мы хотим разделить её ровно пополам. Мы заметим, что формула кривой при подстановке что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыепримет вид

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Более того, наше рекурсивное определение даёт нам способ вычислить точку на основании кривых меньшей степени. Но когда вычисления выполняются при 1/2, их формулы достаточно просто записать. Изображение выглядит так:

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Зелёные точки — это кривые первой степени, розовые точки — кривые второй степени, а синяя точка — это кубическая кривая. Мы заметим, что поскольку каждая из кривых вычисляется при что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, каждую из этих точек можно описать как среднюю точку уже известных нам точек. Поэтому что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, и т.д.

На самом деле, разделение на две нужные нам кривые точно задаётся этими точками. То есть половина кривой задаётся что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыес контрольными точками что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, в то время как «правая» половина что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеимеет контрольные точки что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые.

Как мы можем быть уверены, что это точно те же кривые Безье? Ну, это просто полиномы. Мы можем проверить их на равенство с помощью запутанных алгебраических вычислений. Но стоит заметить, что поскольку что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыепроходит только полпути вдоль что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, то проверка их на равенство аналогична приравниванию что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыес что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, поскольку что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеизменяется в интервале от нуля до единицы, что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеизменяется в интервале от нуля до половины. Аналогично, мы можем сравнить что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыес что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые.

Алгебраические вычисления очень запутаны, но вполне посильны. В доказательство привожу скринкаст того, как я выполняю вычисления, доказывающие идентичность двух кривых.

Теперь, когда мы всё проверили, у нас есть хороший алгоритм для разделения кубической кривой Безье (или любой кривой Безье) на две части. На Javascript он будет выглядеть так:

Здесь curve — это список из четырёх точек, как описано в начале этого раздела, а выходными данными является список двух кривых с правильными контрольными точками. Используемая функция midpoints достаточно проста, и для полноты мы тоже добавим её сюда:

Она просто получает на входе список точек и вычисляет их последовательные средние точки. То есть список из что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеточек превращается в список из что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеточек. Как мы видели, нам нужно вызывать эту функцию что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыедля вычисления сегментации кривой Безье степени что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые.

Как я объяснил ранее, мы можем продолжать подразделять нашу кривую снова и снова, пока каждая из небольших частей не станет практически прямой. То есть наша функция для отрисовки кривой Безье будет следующей:

Разумеется, это ставит перед нами очевидный вопрос: как мы можем определить, что кривая Безье плоская? Для этого есть множество способов. Можно вычислять углы отклонения (от прямой) в каждой внутренней контрольной точке и складывать их. Или можно вычислить объём образуемого четырёхугольника. Однако вычисление углов и объёмов обычно не так удобно: на расчёты углов тратится много времени, объёмы имеют проблемы со стабильностью, а стабильные алгоритмы не очень просты. Нам нужно измерение, для которого достаточно простой арифметики и, возможно, проверки нескольких логических условий.

Оказывается, что такое измерение существует. Его изначально приписывают Роджеру Уилкоксу, но оно достаточно просто выводится вручную.

В сущности, мы хотим измерить «плоскостность» кубической кривой Безье вычислением расстояния от настоящей кривой во время что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыедо того места, где кривая должна бы быть во время что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, если она является прямой.

Формально, имея заданную что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыес контрольными точками что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, мы можем определить прямолинейную кубическую кривую Безье как колоссальную сумму

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Здесь не происходит ничего волшебного. Мы просто задаём кривую Безье с контрольными точками что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Нужно воспринимать их как точки, которые находятся на 0, 1/3, 2/3 и 1 доли пути от что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыедо что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыена прямой линии.

Теперь мы зададим функцию что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, которая будет расстоянием между двумя кривыми в одно и то же время что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Значение плоскостности что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые— это максимум функции что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыепо всем значениям что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Если значение плоскостности ниже определённого уровня допуска, то мы будем считать кривую плоской.

Добавив немного алгебры, мы можем упростить это выражение. Во-первых, значение что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, для которого расстояние максимально, аналогично тому, у которого максимален квадрат, поэтому мы можем избежать вычисления квадратного корня в конце и учитывать это при выборе допуска плоскостности.

Теперь давайте запишем разность как один полином. Во-первых, мы можем избавиться от троек в что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи записать полином как

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

и поэтому что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеравно (при сложении коэффициентов подобных членов что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Вынеся за скобки что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеиз обоих членов и обозначив что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, получим

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

Поскольку максимумом произведения является произведение максимумов, мы можем ограничить вышеприведённую величину произведением двум максимумов. Причина этого в том, что мы сможем просто вычислить два максимума по отдельности. Вычислить максимум несложно и без разделения, но при таком способе нам потребуется меньше этапов вычислений в готовом алгоритме, а визуальный результат будет таким же хорошим.

Применив элементарные вычисления с единственной переменной, получим, что максимальное значение что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыедля что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеоказывается равным что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. А норма вектора — это просто сумма квадратов его компонентов. Если что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеи что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, то представленная выше норма равна

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

И заметьте: для любых вещественных чисел что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыевеличина что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыев точности является прямой линией из что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыев что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые, которая нам хорошо знакома. Максимум для всех что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеот нуля до единицы очевидно будет равен максимуму конечных точек что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые. Так что максимум нашей функции расстояния что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривыеограничен

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

И поэтому наше условие плоскостности заключается в том, чтобы это ограничение было меньше некоторого допуска. Мы можем безопасно разложить 1/16 на множители в это ограничение допуска, и этого будет достаточно для того, чтобы записать функцию.

Вот и она. Мы написали простую HTML-страницу, чтобы получить доступ к элементу canvas и несколько вспомогательных функций для отрисовки отрезков прямой, когда кривая достаточно плоская, и представили конечный результат в этом интерактивном демо (контрольные точки можно двигать).

Изображение, которое вы видиет на этой странице (ниже) — это моя визуализация «Собаки» Пикассо, нарисованная как последовательность кривых Безье. Думаю, что сходство вполне убедительное.

«Собака» Пикассо, собранная из последовательности девяти кривых Безье.

Хотя сам рисунок изобрели не мы (и потому не можем поставить под ним свою подпись), мы смогли представить его как последовательность кривых Безье. Можно только назвать их художественной работой. Здесь мы свели представление к одному файлу: первая строка — это размер холста, а каждая последующая строка представляет кубическую кривую Безье. Комментарии добавлены для лучшей читаемости.

что такое параллельные кривые. Смотреть фото что такое параллельные кривые. Смотреть картинку что такое параллельные кривые. Картинка про что такое параллельные кривые. Фото что такое параллельные кривые

«Собака», Джереми Кун, 2013 год.

Стандартизация кажется мне важной, поэтому мы определим новый тип файла «.bezier», который будет иметь показанный выше формат:

Здесь первые два целых числа определяют размер холста, первое (необязательное) целое число в каждой строке задаёт ширину линии, а curve имеет вид

Если int в начале строки отсутствует, то линии задаётся ширина в три пикселя.

Мы не так сильно углублялись в теорию кривых Безье, как могли бы. Если вы хотите изучить тему глубже (и с использованием матанализа), то см. этот длинный вводный курс. В нём содержится практически всё, что нужно знать о кривых Безье, а также представлены написанные на Processing интерактивные демо.

Искусство низкой сложности

У того, что мы сделали с «Собакой» Пикассо, есть некое философское значение. Ранее в этом блоге мы исследовали идею искусства низкой сложности, и здесь она полностью применима. Основная мысль заключается в том, что «красивое» искусство имеет описание малой длины; если более формально, то «сложность» объекта (представленного в тексте) — это длина самой короткой программы, дающей на выходе этот объект при отсутствии входных данных. Подробнее об этом можно прочитать в нашем введении в колмогоровскую сложность. Тот факт, что мы можем описать линейные рисунки Пикассо малым числом кривых Безье (и относительно короткой программой, дающей на выходе кривые Безье), должен быть глубоким заявлением о красоте самого искусства. Очевидно, что такой взгляд очень субъективен, но у него есть свои сторонники.

Сегодня существует интерес к генерируемому компьютером искусству. Например, в этих недавних соревнованиях по программированию (статья на нидерландском) участникам дали задание сгенерировать рисунок, напоминающий работу Пита Мондриана. Идея заключалась в том, что чем элегантнее алгоритм, тем выше будет его оценка. Для генерации работ Мондриана победитель использовал хэши MD5, и есть ещё множество других впечатляющих примеров (по ссылке выше представлена галерея готовых работ).

В предыдущем посте об искусстве низкой сложности мы исследовали возможность представления всех изображений в системе координат, в которой используются окружности с закрашенным внутренним пространством. Но очевидно, что в такой системе координат нельзя представить «Собаку» с очень низкой сложностью. Похоже, что кривые Безье — это гораздо более естественные системы координат. Небольшие усовершенствования, включающие в себя длину линий и небольшие искажения, не влияют на конечную сложность. Кубическую кривую Безье можно описать любым множество из четырёх точек, а для более «запутанных» описаний (с повышенной сложностью) требуется большее количество точек. Кривые Безье можно произвольно масштабировать, и это не изменит значительно сложность кривой (несмотря на то, что масштабирование на многие порядки величины добавит увеличение сложности с логарифмическим множителем, оно довольно мало). Кривые с большой шириной линий немного сложнее, чем с малой шириной, а для представления множества мелких острых изгибов требуется больше кривых, чем для длинных и плавных дуг.

Недостатком является сложность представления в виде кривой Безье окружности. На самом деле, точно это сделать невозможно. Несмотря на простоту этого объекта (он даже задаётся как единственный многочлен, хотя и с двумя переменными), лучшее, что можно с ним сделать — аппроксимировать его. То же относится и к эллипсам. На самом деле есть способы обхода этой проблемы (концепция рациональных кривых Безье, которые являются частными многочленов), но они добавляют в алгоритм отрисовки неотъемлемую сложность, а аппроксимации с использованием обычных кривых Безье выглядят достаточно хорошо.

Настоящей наградой, которую мы ещё исследуем, будет нахождение способа автоматической генерации искусства. То есть реализации одной из двух возможностей:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *