Кривые

Линии тока

Равномерно разнесённые линии векторного поля по Жобару и Леферу: завихрения шума, водовороты, силовые линии диполей — как нарисованные плоттером.

  • векторная геометрия
  • бесшовный тайл
  • зацикленная анимация
  • экспорт в SVG
Открыть в редакторе →

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

Как это устроено

Нужны поле и способ разложить по нему линии. Поле «вихревой шум» берёт гладкий шум ψ(x, y) и поворачивает его градиент на 90°. У такого поля нулевая дивергенция: нет ни источников, ни стоков, «жидкость» не сжимается и не расширяется, а линии тока совпадают с изолиниями ψ — поток обходит холмы шума по горизонталям, как на топографической карте. В поле «шум направлений» значение шума прямо задаёт угол стрелки, и линии могут сходиться. Поле «водовороты» — это точечные вихри, «диполи» — пары зарядов разного знака, чьи силовые линии похожи на поле маленьких магнитов.

v = (∂ψ/∂y, −∂ψ/∂x), div v = 0, v ⟂ ∇ψ шаг: x ← x + h · v̂(x + ½h · v̂(x)) новая линия — на расстоянии d_sep от готовой; обрыв — ближе d_test

Раскладывает линии алгоритм Жобара и Лефера. Первая линия растёт из случайной точки в обе стороны, шаг за шагом по полю, методом средней точки. Вдоль готовой линии на расстоянии d_sep («Расстояние между линиями») с обеих сторон ставятся затравки для новых. Растущая линия обрывается, как только подойдёт к любой другой ближе, чем d_test («Сближение», доля d_sep).

Немного истории

Бруно Жобар и Вильфрид Лефер опубликовали алгоритм в 1997 году для научной визуализации: случайно брошенные линии сбиваются в пучки, оставляют пустоты и врут о потоке. Вихревой шум придумали Роберт Бридсон и его коллеги в 2007 году для дыма и пыли в кино: он дёшев и похож на настоящую несжимаемую жидкость. Шум здесь периодический — psrdnoise Стефана Густавсона и Иэна Макьюэна, — поэтому в режиме тайла линии проходят сквозь края без шва. В анимации поле не сдвигается: градиенты шума поворачиваются на месте, и вихри клубятся, не уплывая, — этот приём Кен Перлин и Фабрис Нейре в 2001 году назвали flow noise.

Что покрутить

  • «Заострение» 0 даёт ровные линии одной толщины — экспортируйте SVG и отдайте плоттеру.
  • Уменьшите «Сближение» до 0,2 — линии подойдут почти вплотную и вырастут длинными; ближе к 1 они обрываются раньше, и узор становится штриховым.
  • «Поле» «диполи» и «Масштаб» около 1 — картинка из учебника физики; «водовороты» дают замкнутые кольца вокруг центров вихрей.
  • «Октавы» 3–4 добавляют мелкие завихрения поверх крупных, и поток становится похож на мраморную бумагу.
  • Поставьте сверху эффект «Симметрия обоев» — поток свернётся в повторяющийся орнамент, как на набивной ткани.

Параметры

Поле
вихревой шум · шум направлений · водовороты · диполи
Масштаб
Частота шума или число водоворотов и диполей
Октавы
Мелкие завихрения поверх крупных
Расстояние между линиями
Сближение
Насколько близко линия может подойти к соседней, доля расстояния
Шаг интегрирования
Доля расстояния между линиями
Длина линий
Наибольшая длина одной линии
Толщина
Доля расстояния между линиями
Заострение
Линии сужаются к концам; 0 — ровные линии для плоттера
Раскраска
один цвет · по направлению · по длине · пятнами
Цвет линий
Скорость
Оборотов поля за петлю анимации