Найти в Дзене
ТехноШаман

Абстрактные узоры и взаимно простые числа.

В статье я опишу простой способ создания абстрактных фрактальных узоров. Способ давно известен, для его создания хватит тетрадного листка в клетку и ручки. В конце статьи будет ссылка на скрипт, что бы генерировать узор на компьютере. А наличие графического редактора с набором фильтров позволит придать узору эстетичную привлекательность. Мы рисуем прямоугольник, стороны которого - это взаимно простые числа. Взаимно простые числа - это числа, у которых наибольший общий делитель равен 1. И начинаем из угла двигаться по диагонали, отскакивая от сторон прямоугольника, до тех пор, пока не придём в один из углов. При этом мы рисуем траекторию через раз, пропуская каждую вторую клетку. Если стороны были взаимно просты, траектория пройдёт по каждой клетке. Теперь можно раскрасить узор. Есть второй вариант, который проще для программирования, я его по большей части и использовал. Вместо рисования диагонали в клетке, мы закрашиваем всю клетку. Этот узор также можно раскрашивать, чёрные клетк
Оглавление

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

Способ рисования узора
Способ рисования узора

Мы рисуем прямоугольник, стороны которого - это взаимно простые числа.

Взаимно простые числа - это числа, у которых наибольший общий делитель равен 1.

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

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

Теперь можно раскрасить узор.

Частично раскрашенный узор.
Частично раскрашенный узор.

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

Способ рисования узора 2
Способ рисования узора 2

Этот узор также можно раскрашивать, чёрные клетки становятся границами.

Частично раскрашенный узор.
Частично раскрашенный узор.

В приведённом выше примере, клетка имеет размер 6 на 6 пиксель.
Можно использовать любой размер, вплоть до 1 на 1 пиксель.

Также этот вариант удобен тем, что можно легко убирать мелкие детали

Видео про этот способ.

Примеры

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

Примеры после Photoshop

Из подобных узоров получаются красивые абстрактные изображения.

Я делал узоры в разном маштабе и применял к полученому изображению разные фильтры или сразу несколько фильтров.

На некоторых примерах виден фрагмент исходного узора.

Скрипт

Скрипт написан на Pixilang, На канале есть статьи, как им пользоваться.

Здесь я опишу некоторые моменты.

-8

Размер клетки задаётся в переменной pixSize. Минимальный размер 1, можно задавать любые натуральные числа (1, 2, 3, 4, 5, 6....)

В переменных Xcount и Ycount хранится размер рабочей зоны. Меняя эти значения, изменяем узор, но нужно помнить, что эти два числа должны быть взаимно простыми.

Если переменная SCALE больше нуля, то узор будет отмаштабирован что бы заполнить всё окно. Если этого не требуется, нужно присвоить переменной нулевое значение (SCALE = 0).

Если переменным CLEAR_DOTS , CLEAR_KVADRAT, CLEAR_KREST присвоены значения, отличные от нуля, то на изображении удаляются мелкие детали. Это точка, квадрат и крест.

-9

Если переменной SHOW присвоить значение больше нуля, то виден весь процесс создания узора.

Переменная darkColor содержит цвет тёмной части узора, светлая окрашивается в белый цвет.

-10

На 72 строчке есть команда сохранения изображения.
Рисунок будет сохранятся с размером клетки равный 1 ( pixSize = 1 ), даже если указан другой размер. В случае необходимости, можно сделать скрин экрана.
Что бы сохранение работало, нужно убрать
// перед строкой.
Файл сохранится в папке со скриптом под именем
01.png

Статья на хабре, которая побудила меня на эксперимент.

Исходник на Pixilang