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

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

    Под катом — инструкция по использованию сервиса и его возможностей.

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

    Интерфейс


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

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

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


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



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

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

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

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

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

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


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



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

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

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




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

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


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



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

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

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

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

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

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




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

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




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

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

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


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

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

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


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

    Точки


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


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


    Контуры


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


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


    А на 10-угольном базисе такое:


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



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

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

    Для любознательных: формулы расчета количества спектров.
    Базовый набор точек характеризуется параметрами:
    $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$ — четное.

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

    Подробнее
    Реклама
    Комментарии 4
    • 0
      Добрый день, а где на практике это можно применить?
      • 0
        Не люблю отвечать вопросом на вопрос, но все же — что такое «практика»?
      • 0
        Все эти узоры выглядят великолепно! :) Здорово было бы делать анимации с плавными переходами из одного состояния в другое… как думаете, это можно как-то реализовать?
        • 0
          Если вы не про морфинг картинок (из одной в другую), то надо определить, что понимать под состоянием.
          При изменении параметров функции спектры действительно начинают «плыть» — в небольшой области значений, которую я назвал в предыдущей статье «фазовым переходом». Там действительно спектр переходит из одного устойчивого состояния в другое.
          Но есть проблема в идентификации состояний. Так как при таком переходе изменяется также порядок расположения спектров (их собственные числа), — сложно поймать тот же самый спектр.

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