Спектроскоп-калейдоскоп

в 13:04, , рубрики: python, математика, матрицы, Спектроскоп, спектры, узоры

Это заметка о том, что на основании алгоритма генерации спектров (о котором было рассказано в статье «Спектроскоп Салтана...») создан тестовый сервис, обратиться к которому может любой желающий.
Спектроскоп-калейдоскоп - 1
Под катом — инструкция по использованию сервиса и его возможностей.

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

Интерфейс

Интерфейс сервиса предельно прост, ориентирован на настольные компьютеры и не адаптирован под мобильные экраны.

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

Набор точек (Set)

Здесь задается геометрия расположения базового набора точек.

Спектроскоп-калейдоскоп - 2

Grid: Тип сетки. Доступно два типа — на основе правильных многоугольников (Polygon) и на основе окружностей (Radial).

Symm: Тип симметрии, количество сторон базового многоугольника. Доступный диапазон — от треугольника до 16-угольника. При большом количестве сторон картинки спектров становятся мало отличимыми друг от друга (многоугольники превращаются в круг).

Size: Размер стороны многоугольника. Минимальный равен 2 (две точки). Справа от размера в скобках указано общее количество спектральных линий данного набора, которое на единицу меньше количества точек (поскольку исключен нулевой спектр).

Border: Параметр, который позволяет удалять точки из центра набора. В пределе можно оставить только точки на границе (окаймление) многоугольника.

Начальным набором точек является 6-угольник со стороной 10 точек.

Управление функцией (Function)

Доступны два параметра, влияющих на генерацию функции расстояния между точками.

Спектроскоп-калейдоскоп - 3

Общий вид используемой функции: $F=w * D2^g + 1/D2^g$,
здесь $D2$ — квадрат евклидового расстояния между точками, $w=Distortion^3/n^2$ — параметр искажения, а $g=Degree$ — степень.

Данные параметры позволяют «деформировать» базовый набор, делать его выпуклым или вогнутым.

Управление картинкой (Plot)

Спектроскоп-калейдоскоп - 8

Тут два параметра.
Type: Определяет режим вывода — тип выводимой картинки. Три доступных типа — точки (Point), контуры (Contour) и заполнение цветом (Fill). Это ключевой параметр, от которого зависит интерпретация других.
Nums: Количество одновременно выводимых спектров. От 1 до 16. При выводе нескольких спектров можно указать параметры, индексы которых будут также линейно меняться с номером спектра. Такие параметры задаются в секции «Spectr».

Управление спектром (Spectr)

Здесь настраиваются три основных индекса, влияющих на отображение спектров: P, Z и S.

Спектроскоп-калейдоскоп - 9

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

P-index: Это номер проекции. Общее количество доступных проекций выводится после обратной черты. Например, надпись «5/90» означает, что текущий P-index равен 5, а всего доступно 90 разных проекций. Количество проекций — это количество вырожденных спектров.

Z-index: Данный индекс можно рассматривать как вес или высоту точек проекции. Значение индекса влияет на распределение цвета точек в режиме Points, или на форму контуров (областей) в режимах Contour и Fill.

S-index: Еще один индекс, связанный с невырожденными уровнями спектра. В режиме Points он влияет на распределение размера выводимых точек. В режимах Contour и Fill от данного индекса зависит маскировка триангуляции.
В отличие от других индексов значение S-индекса начинается с 0. Нулевое значение означает отключенный индекс (не активен).

Общее количество доступных индексов Z и S определяется количеством невырожденных уровней спектра.

Стиль/размер (Style)

Спектроскоп-калейдоскоп - 10

Size: В режиме Points параметр стиля определяет размер точек. В режиме Contour — количество выводимых уровней (контуров). При большом значении параметра генерация контуров замедляется.

Управление цветом (Color)

Спектроскоп-калейдоскоп - 11

Map: Выбор цветовых палитр (карт). Флажок инвертирует палитру.
Alpha: Значение насыщенности цвета.

Также доступен выбор фона картинок. Некоторые спектры хорошо звучат на темном фоне.

Действия меню

В текущей версии доступно:

  • Save: Сохранение текущих параметров спектра.
  • Load: Восстановление спектра по ранее сохраненным параметрам.
  • Reset: Сброс всех параметров к «заводским».

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

Примеры спектров

Не все спектры имеют художественную ценность. Но если немного попрактиковаться, то можно научиться получать довольно интересные.

Точки

При выводе мозаик размер точек фиксирован, а распределение цвета задается Z-индексом. В первой статье уже приводился узор в виде мозаики. Здесь мы просто развернули мозаику по Z-индексу:
Спектроскоп-калейдоскоп - 12

Если же варьировать размер точек, то можно получить вот такие «кружева»:
Спектроскоп-калейдоскоп - 13

Контуры

Пример очень простых контуров на 6-угольном базисе:
Спектроскоп-калейдоскоп - 14

Именно своей примитивностью они и привлекают.
Если немного усложнить (добавить количество точек набора), то тогда можно получить примерно такое:
Спектроскоп-калейдоскоп - 15

А на 10-угольном базисе такое:
Спектроскоп-калейдоскоп - 16

При желании всегда можно добавить цвета. Вот, например, красные 5-конечные звезды для буденновок:

Спектроскоп-калейдоскоп - 17

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

Всех с днем знаний, без которых мы бы этих картинок не увидели!

Для любознательных: формулы расчета количества спектров.

Базовый набор точек характеризуется параметрами:
$a$ — размер стороны многоугольной решетки и
$s$ — количество сторон многоугольника.
Удобно ввести параметр $p=a (a-1) /2$ — это количество точек на секторе.
Тогда общее количество точек базового многоугольника $Np$ будет равно:
$Np=s*p + 1$ (+1 — это центральная точка)
Общее количество уровней спектра на единицу меньше количества точек:
$NumS=s*p$
Часть уровней двукратно вырождена — проекции. Их количество обозначим как $NumP$. Количество невырожденных уровней обозначим $NumZ$.
Тогда имеет место инвариант: $NumS=2 NumP + NumZ$

Далее. Количество проекций определяется формулой:
$NumP=p*(Round(s/2) - 1)$. Здесь $Round()$ — это округление до целого.
Оставшееся количество невырожденных уровней зависит от четности параметра симметрии:
$NumZ=p$, если $s$ — нечетное. И $NumZ=2p$, если $s$ — четное.

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

Автор: dmagin

Источник

Поделиться

* - обязательные к заполнению поля