Как стать автором
Обновить

Комментарии 56

Вы мне напомнили о славных временах когда все пытались поломать программу Cerber, которая эти самые Гильоши рисует. Славно, что технологии не стоят на месте )
да, была такая) тоже пытались, а то стоила она каких-то диких денег
Есть Rozetta. Бесплатная.
Она рисует не настоящие гильоши, а просто симметричные розетки.

Ну, это тоже гильош. Арка входа в храм Сан-Сальваторе ин Лауро, Рим. Хотя там и розетки есть (от фр. rosette, буквально «розочка») — мотив орнамента в виде лепестков распустившегося цветка или нескольких листьев, одинаковых по форме, расположенных симметрично и радиально расходящихся из сердцевины, аналогично ботанической розетке.
Да, интересные кривые получаются. Меня когда-то нравилось возится с ними в postscript, исходники еще есть. Если есть желание, то могу выслать пример для расширения статьи.
Конечно, очень интересно.
Конечно, присылайте.
Очень интересно. Очень давно (лет 20 назад) сталкивался с этими «завитушками» и даже пытался как-то их воспроизвести в CorelDraw, но не справился. :)

По поводу проецирования на сложные контуры. Мне кажется, что декартовы координаты можно спроецировать на плавную кривую, где вектор нормали будет у нас за ось Y, а смещение вдоль кривой X. Тогда можно нарисовать почти произвольные формы.
>> При использовании оптического копирования они бесполезны — сканеру все равно, что считывать: узоры или портреты.
Не согласен. Обычный бытовой сканер не воспроизведёт тонкие линии, на их месте будет сплошной фон.
Скорее так: у сканера или копира прямоугольная сетка сканирования, а линии в гильоше идут под очень странными углами, в результате при не очень высоком разрешении получаются искажения, которые очень хорошо заметны на копии или скане: меняется рисунок муара и подделку можно заметить даже при взгляде мельком на банкноту.
А еще их часто можно отсканировать(найти сканер лучше или просто переснять хорошим макро-обьективом), но нельзя напечатать — во-первых, они очень тонкие(так как делаются штампом, а не обычной печатью), и бытовой принтер не может их воспроизвести, а во-вторых, состоят из одного цвета, который принтер попытается вопроизвести тремя в разных пропорциях, из-за чего на копии, при сильном увеличении, будут видны разноцветнеы точки, а не одна линия.
а если еще ирисный раскат использовать для печати гильоша то их вообще невозможно будет повторить. Поэтому автор погорячился с таким безапелляционным утверждением о бесполезности гильошей
Вижу, что на всех новых банкнотах их практически нигде нет.
А какие банктноты вы смотрели?
Я просматриваю новые банкноты всех основных стран мира.

Можно взять СНГ для примера.

Россия — гильоши только в розетке с номиналом на обратной стороне. Были еще на 1000 слева, затерты и заменены голограммой.

Украина — некое подобие на 10 грн, на розетке с номиналом слева.

Белоруссия, выпуск 2009 года — нет

Казахстан — нет.

Литва, Латвия, Эстония — нет.

Грузия — нет

Армения — нет
Посмотрел щас нестарую на вид тысячейеновую банкноту — она, по-моему, этими гильошами покрыта абсолютно вся. Не знаю, правда, что это доказывает.
Что Япония придерживается традиций — не более того. Новый европейский стиль, начатый немецкой маркой выпуска 1992 года, сильно отличается.

Достал из кармана 100 RUR. Гильоши вокруг номинала на обороте в правом верхнем углу.
На 1000 RUR — аналогично. Купюра новая.
А вот на 5000 RUR — гильошей нигде не нашёл, только тень цифр номинала в левом верхнем углу зарисована чем-то подобным, но невооружённым глазом я не разглядел, гильоши это или просто сетка.

Гильоши, только сделаны двойными линиями
Он и микропечать не воспроизведет, и тонкие штрихи на гравированном портрете. Так что в гильошах тут нет ничего уникального.
Спасибо за статью.

Название статьи из одного слова — прям в глаза бросилось!

У меня на главной Я стоит виджет Хабра. И однословный заголовок очень сильно в нем выделился. Надо взять на заметку :-)
Соглашусь, только из-за этого и открыл сию статью и прочитал просто с огромным интересом! Только к сожалению если все авторы прочувствую эффективность односложных заголовков — то такими вскоре станут все заголовки. Так что тут палка о двух концах, если честно…
По поводу защиты -гильоши применяются до сих пор. Технически на полиграфических машинах их воспроизвести не очень-то и просто, во-первых потому что при растрировании векторной графики с таким сложным рисунком RIP (rast image processor) нагружается очень сильно, вплоть до невозможности выполнения задачи.
Во-вторых, гильошь применяется для защиты не сам по себе а совместно с Орловской печатью ru.wikipedia.org/wiki/%D0%9E%D1%80%D0%BB%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D1%8C, когда краски из разных секций совмещаются на одном печатном цилиндре
и ирисовый раскат forum.print-forum.ru/showthread.php?t=571276 когда разные краски в красочный аппарат добавляются в пределах одной красочной секции.
Тогда (как видно в т.ч. на приведенных в статье примерах) удается идеально совместить линии разного цвета и получить красивый переход, без разрыва линии.
Повторить цифровыми методами эти приемы или невозможно или крайне трудно (и всё равно отличимо на хорошем увеличении).
В принципе, кривые для гильош можно вместить между внутренним и внешним контурами в полярных координатах используя простой алгоритм. Суть в том, что сначала считаются массивы точек для внешнего и внутреннего контуров и их «средняя линия» для кажого значения полярного угла. Затем для этих же значений полярного угла рассчитываются точки внутренних кривых от внутреннего к внешнему контурам пропорционально значениям их «косинусов» учитывая сдвиг по фазе для каждой кривой.
Выходит что-то типа этого (анимированная гифка здесь: https://habrastorage.org/getpro/habr/comment_images/b01/20f/451/b0120f451e80d9722272e7091d0de7fa.gif):

А можно эту гифку закольцевать? Случайно увидел, что она анимированная оказывается
Гммм, действительно, только один раз проигрывается почему-то (делал ее в Matlab используя imwrite, в котором 'LoopCount'=inf по умолчанию; но если поставить 'LoopCount'=65535 то вроде проигрываетсь много раз).
Вот полная анимация (я не нашел как удалить картинку из первого комментария):
Гильоши хороши по металлу! — там из-за того, что эта сложная кривая чертится резцом с гранями — узор потом имеет очень сложные отражения от этих граней, как бы «играет». Делал свободнокачающимся на оси гравёром с 3d-фрезера: вид — фантастика, но очень медленно, штучное по сути изделие получается (чем оно, собственно, и было — ювелирка), и сфотографировать практически без шансов — сплошные блики, нефокус и т.п. а приличной зеркалки с макрообъективом, штативом и лайт-боксом под рукой не было. Потом поверх прозрачная эмаль.
Прямо такие и делали? А можете описать хотя бы примерно сам станок?
не, я на обычный настольный 3d-фрезер — в шпиндель перо-гравёр (дорогое сцуко), вращение у шпинделя отключаем — пусть самоустанавливается «по потоку»), картинка какой-то простой программы (кажется называлась ещё «розетта», но сейчас из-за космостанции и обучалки языку её не найти), потом долгое шаманство с g-кодами, с учётом особенностей самого фрезера, что бы кривая была гладкая.
в качестве детали — заранее отлитую по форме, полированную, отожжённую пластинку из серебра (она потом в оправку и заливается эмалью).
Это всё в условиях ювелирной мастерской.
Сложно, геморрно, дорого и не тиражируемо в итоге получается, много проще вставить камушек и не париться, тем более что они сейчас в общем-то даром http://www.sapphire.ru/vcd-344/catalog.html (и далее внутрь каталога. там внутри много больше, чем снаружи кажется).
Такие узоры очень популярны дорогих механических часах. Если интересно как работает станок и мастер, то можете посмотреть на ютубе видео Art of Guilloché.
по поводу утверждения автора о неактуальности гильош на ценных бумагах википедия говорит «Согласно существующим нормативам, гильоширные элементы должны занимать не менее 70 % площади ценных бумаг»
открыл кошелёк, достал купюру (2 грн), убедился что википедия не врёт
Стесняюсь спросить, где же там 70% гильошей? Или вы тангирную сетку гильошами называете?
Читаю на купюре в 1 червонец 1926 года: «1 червонец содержит 7.74гр. чистого золота». Эх…
Реально он на золото никогда не обменивался.
Золото не идеал меры ценности, в цене менялось в 10 раз с 1970 года
image
Сейчас еще подводные месторождения освоят и цена вниз пойдет, или повысится спрос и пойдет вверх.
В принципе, кривые для гильош можно вместить между внутренним и внешним контурами в полярных координатах используя простой алгоритм.


Вариант еще проще. Просто синусоида в полярных координатах, радиус меняется по синусоиде, круг немного модифицирован в эллипс


то же самое за 3 оборота, одна линия, плавно увеличивается фаза до 2Pi и линия получается без разрывов


Тут 10 оборотов линии вокруг центральной точки.




faza:=faza+(2*pi/step)/n;
r:=sin(10*i*2*pi/step+faza);
r:=r*40;
r:=r+150;


80 циклов

Модифицировал немного синусоиду деформацией по ходу рисования:
Заголовок спойлера


появился 3D эффект
Заголовок спойлера


А закон деформации какой?

Перо вращается вокруг центральной осевой линии, 10 оборотов на «лепесток», радиус 5 пикселей, малый радиус приводит к едва заметным искажениям, которые интересно проявляют в структуре из множества линий, появляется эффект 3D неожиданно. Я планировал только более витиеватую структуру узора.
Тут фигура Лиссажу более сложная
Чтобы сжимать картинки с тонкими линиями хорошо подходит gif, png. Но gif на 1000 кадров создавать как-то сложно, стандартные видео кодеки жмут не корректно

Жаль не стал стандартом формат APNG из этой статьи. Или raw видео сжатое zip/rar алгоритмом, тоже что-то сравнимое выдает.
Да, это самый простой вариант. Но этим способом можно получить только те кривые, у которых внутренняя и внешняя огибающие эллипсы. Если же огибающие сложной формы, то для таких гильош математика будет сложнее.
Например, на этом рисунке

внутренняя огибающая в полярных координатах имеет форму синусоиды и частоту 6 (r ~ sin(6*phi)), а внешняя — 12. Пространство между ними заполнено 15 синусоидами с частотой 20 по вышеописанному алгоритму.
Не имея Матлаба, пытался воспроизвести на Питоне, вроде, получилось, вдруг кому пригодится:

import numpy as np
import matplotlib.pyplot as plt

Ncurves = 10
phi_max = np.pi*2.0

phi = np.arange(0.0, phi_max, 0.01)
r1 = 10.0 + 1.0*np.sin(6.0*phi)
r2 = 20.0 + 3.0*np.sin(12.0*phi)

ax = plt.subplot(111, projection='polar')
ax.plot(phi, r1, color='r')
ax.plot(phi, r2, color='b')
[ax.plot(phi, (r1 + r2)/2.0 + (r2 — r1)*np.cos(20.0*phi + phi_max/Ncurves*i)/2.0, color='g') for i in range(Ncurves)]

plt.show()
Выглядит идеально. А какой алгоритм?
Да тут особо никакого алгоритма и нету. Берётся функция комплексной переменной, например
4*Cos(2*Pi*t)+2*I*Sin(2*Pi*t)+Power(E,2*I*Pi*t)*Cos(a*Pi*(k+2*t))
где в зависимости от параметра t действительная часть адресует точку по оси X, а мнимая — по оси Y. Сама функция строится из аналогового прототипа типа такого.
Как обеспечить, чтобы гильоши шли внутри уже заранее установленных границ? Например, как вы изобразили эллипс?
Формула выше как раз про эллипс. В ней не задаются границы — в ней задаётся траектория (первые 2 слагаемых), вдоль которой идёт синусоида (3-е слагаемое), а границы получаются в зависимости от её наклона (Power(E,2*I*Pi*t)) и амплитуды (константа). Ширина и высота эллипса тут — 4 и 2 соответственно.
Можно и наоборот — тогда надо задавать функцию с дополнительным параметром, который трансформирует внутренние границы во внешние и модулировать синусоидой уже его.
Вот более релевантные варианты:







Красным пунктиром отображена траектория, от которой идёт синусоида. Вот код, которым они были получены (Wolfram Mathematica):

Manipulate[ParametricPlot[{
Join[Table[
8(-1)^t+1(-1)^(-3t)+(Cos[a(t+k)Pi]+Cos[b(t+k)Pi]/2)(3(-1)^t+1(-1)^(-3t))//ReIm
,{k,0,2-2/n,2/n}],
{8(-1)^t+1(-1)^(-3t)//ReIm},
{8(-1)^t+1(-1)^(-3t)+(1+1/2)(3(-1)^t+1(-1)^(-3t))//ReIm},
{8(-1)^t+1(-1)^(-3t)+(-1-1/2)(3(-1)^t+1(-1)^(-3t))//ReIm}
]
}//Evaluate
,{t,0,2},
PlotStyle->{Hue[0.69,0.77,0.76],
Hue[0.12,0.79,0.7],Hue[0.69,0.77,0.76],
Hue[0.12,0.79,0.7],Hue[0.69,0.77,0.76],
Hue[0.12,0.79,0.7],{Hue[0,0.78,0.79],Dashed,
Thick},{Hue[0.53,0,0]},{Hue[0.53,0,0]}},
Axes->False,
GridLines->((Range[40]-20)/1//{#,#}&)]
,{{n,6},1,20,1}
,{{a,7},1,30,1}
,{{b,7},1,30,1}]

Верхняя огибающая — синусоида:


или так тоже можно:

А самое главное — формулы? По тому же принципу?
Формула — вот:

(3*b*t + Cos(e*Pi*t) + Complex(0,1)*Power(Cos((Pi*(2*kk + 9*c*t))/18),2)*(Complex(0,1)*Cos(e*Pi*t) + 2*b*(2 + Sin(Pi*(phase + t)))))/b

строится от t, идея та же. Сначала описал функцию с «качающейся» направляющей, затем через решение уравнения нашёл её амплитуду, затем промодулировал синусоидой. Если направляющую не «качать», то формула будет сильно проще:

t + Complex(0,1)*(1 + Cos(a*t))*(2 + Cos(b*t))
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории