Исходник программы, показывающей пример генерации изображения путем вращения и дублирования произвольных рисунков на холсте с эффектом калейдоскопа.
При рисовании на изображении на холсте создается несколько копий рисунка, каждая из которых поворачивается на указанное количество градусов и указанное количество раз.
Для рисования используется компонент TImage и процедура DrawLineInSeg, которая рисует один линейный сегмент между двумя конечными точками вместе с его поворотами и отражениями. Записи TPoints содержат угол и радиус каждой точки, отсчитываемые от центра изображения. Углы увеличиваются на угол поворота столько раз, сколько пользователь указал для каждого конца сегмента линии, по координатам X и Y и рисуются соединительные линии.
Первые изображения - это отражение реального объекта (или рисунка в нашем случае). Второе изображение слева - отражение правого отражения и т.д. Каждая отраженная точка существует под углом за зеркалом, равным углу, под которым реальная точка находится перед зеркалом.
Эта реализация отличается от реального калейдоскопа. Для двухзеркального калейдоскопа в реальном мире объекты, не находящиеся между зеркалами, вообще не видны. Это потребовало бы отсечения линейных сегментов на зеркальных поверхностях и игнорирования линейных сегментов не между зеркалами. Это волшебные виртуальные двухсторонние зеркала, поэтому все линейные сегменты отражаются, как если бы они существовали между двумя основными зеркалами.