Это заметка о том, что на основании алгоритма генерации спектров (о котором было рассказано в статье «Спектроскоп Салтана...») создан тестовый сервис, обратиться к которому может любой желающий.
![](https://habrastorage.org/r/w1560/web/824/fc6/cdb/824fc6cdba57405682ad1d73b4380c34.png)
Под катом — инструкция по использованию сервиса и его возможностей.
Общие принципы генерации спектров (проекций) приведены в упомянутой выше статье. Картинки чем-то напоминают фигуры Хладни.
Интерфейс сервиса предельно прост, ориентирован на настольные компьютеры и не адаптирован под мобильные экраны.
Управление генерацией состоит в изменении параметров, приведенных в правой части экрана на панели управления. Панель управления разбита на несколько секций.
Здесь задается геометрия расположения базового набора точек.
![](https://habrastorage.org/r/w1560/web/e81/f06/65e/e81f0665eb0d4600aebb871902f11ed9.png)
Grid: Тип сетки. Доступно два типа — на основе правильных многоугольников (Polygon) и на основе окружностей (Radial).
Symm: Тип симметрии, количество сторон базового многоугольника. Доступный диапазон — от треугольника до 16-угольника. При большом количестве сторон картинки спектров становятся мало отличимыми друг от друга (многоугольники превращаются в круг).
Size: Размер стороны многоугольника. Минимальный равен 2 (две точки). Справа от размера в скобках указано общее количество спектральных линий данного набора, которое на единицу меньше количества точек (поскольку исключен нулевой спектр).
Border: Параметр, который позволяет удалять точки из центра набора. В пределе можно оставить только точки на границе (окаймление) многоугольника.
Начальным набором точек является 6-угольник со стороной 10 точек.
Доступны два параметра, влияющих на генерацию функции расстояния между точками.
![](https://habrastorage.org/r/w1560/web/8df/4cd/536/8df4cd536ced4a9f85a1f122a7c4fdaf.png)
Общий вид используемой функции:
,
здесь
— квадрат евклидового расстояния между точками,
— параметр искажения, а
— степень.
Данные параметры позволяют «деформировать» базовый набор, делать его выпуклым или вогнутым.
![](https://habrastorage.org/r/w1560/web/34f/8f3/b05/34f8f3b05c9045378618a65007d24cf6.png)
Тут два параметра.
Type: Определяет режим вывода — тип выводимой картинки. Три доступных типа — точки (Point), контуры (Contour) и заполнение цветом (Fill). Это ключевой параметр, от которого зависит интерпретация других.
Nums: Количество одновременно выводимых спектров. От 1 до 16. При выводе нескольких спектров можно указать параметры, индексы которых будут также линейно меняться с номером спектра. Такие параметры задаются в секции «Spectr».
Здесь настраиваются три основных индекса, влияющих на отображение спектров: P, Z и S.
![](https://habrastorage.org/r/w1560/web/e1a/3cc/f18/e1a3ccf18d3e48608ef7a0b8da527b4e.png)
Справа от каждого имени индекса находится флажок (чекбокс), определяющий участие индекса в развороте, если выводится одновременно более одного спектра. Несмотря на то, что можно активировать одновременно все три флажка (разворота), лучше этого не делать, а варьировать только какой-то один индекс.
P-index: Это номер проекции. Общее количество доступных проекций выводится после обратной черты. Например, надпись «5/90» означает, что текущий P-index равен 5, а всего доступно 90 разных проекций. Количество проекций — это количество вырожденных спектров.
Z-index: Данный индекс можно рассматривать как вес или высоту точек проекции. Значение индекса влияет на распределение цвета точек в режиме Points, или на форму контуров (областей) в режимах Contour и Fill.
S-index: Еще один индекс, связанный с невырожденными уровнями спектра. В режиме Points он влияет на распределение размера выводимых точек. В режимах Contour и Fill от данного индекса зависит маскировка триангуляции.
В отличие от других индексов значение S-индекса начинается с 0. Нулевое значение означает отключенный индекс (не активен).
Общее количество доступных индексов Z и S определяется количеством невырожденных уровней спектра.
![](https://habrastorage.org/r/w1560/web/105/787/cfa/105787cfa5924e409bfab85bcdd7ef17.png)
Size: В режиме Points параметр стиля определяет размер точек. В режиме Contour — количество выводимых уровней (контуров). При большом значении параметра генерация контуров замедляется.
![](https://habrastorage.org/r/w1560/web/ec1/0bd/1dd/ec10bd1dd04741d09904b56143195a8d.png)
Map: Выбор цветовых палитр (карт). Флажок инвертирует палитру.
Alpha: Значение насыщенности цвета.
Также доступен выбор фона картинок. Некоторые спектры хорошо звучат на темном фоне.
В текущей версии доступно:
Немного, да. Но лучше, чем ничего.
Можно получать спектры и сохранять их в файлы изображений на своем компьютере.
Не все спектры имеют художественную ценность. Но если немного попрактиковаться, то можно научиться получать довольно интересные.
При выводе мозаик размер точек фиксирован, а распределение цвета задается Z-индексом. В первой статье уже приводился узор в виде мозаики. Здесь мы просто развернули мозаику по Z-индексу:
![](https://habrastorage.org/r/w1560/web/037/b65/828/037b658286c7418e8b5836a022ea9e45.png)
Если же варьировать размер точек, то можно получить вот такие «кружева»:
![](https://habrastorage.org/r/w1560/web/50c/e8d/2af/50ce8d2af5ec40618d643a0a32078a0a.png)
Пример очень простых контуров на 6-угольном базисе:
![](https://habrastorage.org/r/w1560/web/1da/060/fcc/1da060fcc09548a6abc7e579cdb3250f.png)
Именно своей примитивностью они и привлекают.
Если немного усложнить (добавить количество точек набора), то тогда можно получить примерно такое:
![](https://habrastorage.org/r/w1560/web/444/dcb/8ff/444dcb8ff76b4c99bc0d1160f8bf3cc1.png)
А на 10-угольном базисе такое:
![](https://habrastorage.org/r/w1560/web/ba6/351/04b/ba635104b49c4d67ab615a732b70f7a3.png)
При желании всегда можно добавить цвета. Вот, например, красные 5-конечные звезды для буденновок:
![](https://habrastorage.org/r/w1560/web/5a9/cc8/e4c/5a9cc8e4c5b74851b92fbb40d6f06eba.png)
В целом у меня все. Пользуйтесь и экспериментируйте!
Надеюсь, но не гарантирую, что сервис выдержит. Критичные и смешные баги будем исправлять, расширение функционала — под вопросом.
Всех с днем знаний, без которых мы бы этих картинок не увидели!
![](https://habrastorage.org/web/824/fc6/cdb/824fc6cdba57405682ad1d73b4380c34.png)
Под катом — инструкция по использованию сервиса и его возможностей.
Общие принципы генерации спектров (проекций) приведены в упомянутой выше статье. Картинки чем-то напоминают фигуры Хладни.
Интерфейс
Интерфейс сервиса предельно прост, ориентирован на настольные компьютеры и не адаптирован под мобильные экраны.
Управление генерацией состоит в изменении параметров, приведенных в правой части экрана на панели управления. Панель управления разбита на несколько секций.
Набор точек (Set)
Здесь задается геометрия расположения базового набора точек.
![](https://habrastorage.org/web/e81/f06/65e/e81f0665eb0d4600aebb871902f11ed9.png)
Grid: Тип сетки. Доступно два типа — на основе правильных многоугольников (Polygon) и на основе окружностей (Radial).
Symm: Тип симметрии, количество сторон базового многоугольника. Доступный диапазон — от треугольника до 16-угольника. При большом количестве сторон картинки спектров становятся мало отличимыми друг от друга (многоугольники превращаются в круг).
Size: Размер стороны многоугольника. Минимальный равен 2 (две точки). Справа от размера в скобках указано общее количество спектральных линий данного набора, которое на единицу меньше количества точек (поскольку исключен нулевой спектр).
Border: Параметр, который позволяет удалять точки из центра набора. В пределе можно оставить только точки на границе (окаймление) многоугольника.
Начальным набором точек является 6-угольник со стороной 10 точек.
Управление функцией (Function)
Доступны два параметра, влияющих на генерацию функции расстояния между точками.
![](https://habrastorage.org/web/8df/4cd/536/8df4cd536ced4a9f85a1f122a7c4fdaf.png)
Общий вид используемой функции:
здесь
Данные параметры позволяют «деформировать» базовый набор, делать его выпуклым или вогнутым.
Управление картинкой (Plot)
![](https://habrastorage.org/web/34f/8f3/b05/34f8f3b05c9045378618a65007d24cf6.png)
Тут два параметра.
Type: Определяет режим вывода — тип выводимой картинки. Три доступных типа — точки (Point), контуры (Contour) и заполнение цветом (Fill). Это ключевой параметр, от которого зависит интерпретация других.
Nums: Количество одновременно выводимых спектров. От 1 до 16. При выводе нескольких спектров можно указать параметры, индексы которых будут также линейно меняться с номером спектра. Такие параметры задаются в секции «Spectr».
Управление спектром (Spectr)
Здесь настраиваются три основных индекса, влияющих на отображение спектров: P, Z и S.
![](https://habrastorage.org/web/e1a/3cc/f18/e1a3ccf18d3e48608ef7a0b8da527b4e.png)
Справа от каждого имени индекса находится флажок (чекбокс), определяющий участие индекса в развороте, если выводится одновременно более одного спектра. Несмотря на то, что можно активировать одновременно все три флажка (разворота), лучше этого не делать, а варьировать только какой-то один индекс.
P-index: Это номер проекции. Общее количество доступных проекций выводится после обратной черты. Например, надпись «5/90» означает, что текущий P-index равен 5, а всего доступно 90 разных проекций. Количество проекций — это количество вырожденных спектров.
Z-index: Данный индекс можно рассматривать как вес или высоту точек проекции. Значение индекса влияет на распределение цвета точек в режиме Points, или на форму контуров (областей) в режимах Contour и Fill.
S-index: Еще один индекс, связанный с невырожденными уровнями спектра. В режиме Points он влияет на распределение размера выводимых точек. В режимах Contour и Fill от данного индекса зависит маскировка триангуляции.
В отличие от других индексов значение S-индекса начинается с 0. Нулевое значение означает отключенный индекс (не активен).
Общее количество доступных индексов Z и S определяется количеством невырожденных уровней спектра.
Стиль/размер (Style)
![](https://habrastorage.org/web/105/787/cfa/105787cfa5924e409bfab85bcdd7ef17.png)
Size: В режиме Points параметр стиля определяет размер точек. В режиме Contour — количество выводимых уровней (контуров). При большом значении параметра генерация контуров замедляется.
Управление цветом (Color)
![](https://habrastorage.org/web/ec1/0bd/1dd/ec10bd1dd04741d09904b56143195a8d.png)
Map: Выбор цветовых палитр (карт). Флажок инвертирует палитру.
Alpha: Значение насыщенности цвета.
Также доступен выбор фона картинок. Некоторые спектры хорошо звучат на темном фоне.
Действия меню
В текущей версии доступно:
- Save: Сохранение текущих параметров спектра.
- Load: Восстановление спектра по ранее сохраненным параметрам.
- Reset: Сброс всех параметров к «заводским».
Немного, да. Но лучше, чем ничего.
Можно получать спектры и сохранять их в файлы изображений на своем компьютере.
Примеры спектров
Не все спектры имеют художественную ценность. Но если немного попрактиковаться, то можно научиться получать довольно интересные.
Точки
При выводе мозаик размер точек фиксирован, а распределение цвета задается Z-индексом. В первой статье уже приводился узор в виде мозаики. Здесь мы просто развернули мозаику по Z-индексу:
![](https://habrastorage.org/web/037/b65/828/037b658286c7418e8b5836a022ea9e45.png)
Если же варьировать размер точек, то можно получить вот такие «кружева»:
![](https://habrastorage.org/web/50c/e8d/2af/50ce8d2af5ec40618d643a0a32078a0a.png)
Контуры
Пример очень простых контуров на 6-угольном базисе:
![](https://habrastorage.org/web/1da/060/fcc/1da060fcc09548a6abc7e579cdb3250f.png)
Именно своей примитивностью они и привлекают.
Если немного усложнить (добавить количество точек набора), то тогда можно получить примерно такое:
![](https://habrastorage.org/web/444/dcb/8ff/444dcb8ff76b4c99bc0d1160f8bf3cc1.png)
А на 10-угольном базисе такое:
![](https://habrastorage.org/web/ba6/351/04b/ba635104b49c4d67ab615a732b70f7a3.png)
При желании всегда можно добавить цвета. Вот, например, красные 5-конечные звезды для буденновок:
![](https://habrastorage.org/web/5a9/cc8/e4c/5a9cc8e4c5b74851b92fbb40d6f06eba.png)
В целом у меня все. Пользуйтесь и экспериментируйте!
Надеюсь, но не гарантирую, что сервис выдержит. Критичные и смешные баги будем исправлять, расширение функционала — под вопросом.
Всех с днем знаний, без которых мы бы этих картинок не увидели!
Для любознательных: формулы расчета количества спектров.
Базовый набор точек характеризуется параметрами:
— размер стороны многоугольной решетки и
— количество сторон многоугольника.
Удобно ввести параметр
— это количество точек на секторе.
Тогда общее количество точек базового многоугольника
будет равно:
(+1 — это центральная точка)
Общее количество уровней спектра на единицу меньше количества точек:
![$NumS = s*p$](https://habrastorage.org/getpro/habr/formulas/b69/689/cdc/b69689cdc9a0ab84217d10fdf65077f5.svg)
Часть уровней двукратно вырождена — проекции. Их количество обозначим как
. Количество невырожденных уровней обозначим
.
Тогда имеет место инвариант:![$NumS = 2 NumP + NumZ$](https://habrastorage.org/getpro/habr/formulas/105/edb/776/105edb7768b3f6a17c0583a52212c9b7.svg)
Далее. Количество проекций определяется формулой:
. Здесь
— это округление до целого.
Оставшееся количество невырожденных уровней зависит от четности параметра симметрии:
, если
— нечетное. И
, если
— четное.
Самое странное тут — это последняя формула. При фиксированном размере стороны многоугольника количество вырожденных уровней не зависит от уровня симметрии (количества сторон), а зависит только от его четности. Наверное, этому есть какое-то простое объяснение, которое нам пока неизвестно.
Удобно ввести параметр
Тогда общее количество точек базового многоугольника
Общее количество уровней спектра на единицу меньше количества точек:
Часть уровней двукратно вырождена — проекции. Их количество обозначим как
Тогда имеет место инвариант:
Далее. Количество проекций определяется формулой:
Оставшееся количество невырожденных уровней зависит от четности параметра симметрии:
Самое странное тут — это последняя формула. При фиксированном размере стороны многоугольника количество вырожденных уровней не зависит от уровня симметрии (количества сторон), а зависит только от его четности. Наверное, этому есть какое-то простое объяснение, которое нам пока неизвестно.