Эмодзи Коинобори

Эта программа рисует двух японских карпов коинобори - декоративных рыбок, развевающихся на ветру,- с помощью бета сплайнов, кривых Безье и градиентов.

Основные функции:
drawCircle() - рисует окружность (используется для флагштока, глаз и чешуи).
drawRect() - рисует флагшток.
drawBSpline() - строит сглаженную волнистую линию по заданным точкам с помощью бета сплайна, используется для узоров на хвосте и плавниках у обоих рыб.
generateVerticalWavePoints() и generateHorizontalWavePoints() - создают массив точек, имитирующих вертикальные и горизонтальные волны (опять таки для узоров, о которых было сказано выше), по которым потом строятся сплайны.
drawCircleSet() - рисует серию кругов разного цвета, формируя узор на теле рыбы (чешую).

Алгоритм рисования:
Создаётся флагшток — золотой прямоугольник и круг сверху.Затем первая рыба (синяя). Контур тела строится при помощи кривых Безье, после заполняется градиентом. Через clip-область накладываются волнистые узоры (бета сплайны) на конечности и чешуя на тело рыбки. Спираль внутри глаза как уникальный примитив. Вторая рыбы строится аналогично снизу.