Летом 2010-го я немного углубился в тему фракталов и решил поэкспериментировать с ними в среде Java. В итоге получилась небольшая программа, основной функцией которой является рисование кривой Коха на основе заданных координат исходного отрезка в 2D плоскости и количества итераций. На какие-то научные достижения я не претендую, просто делал это для эстетического удовольствия.
В программе предусмотрены два разных алгоритма рисования кривой Коха:
-
Алгоритм с циклом и массивом для хранения линий следующего итерационного цикла (функция drawCurveKoch, исходный код java ниже). Этот алгоритм мне пришел в голову сразу, еще до вникания в более грамотные с математической точки зрения, алгоритмы. В этом алгоритме я применил простейшие правила геометрии. Алгоритм заключается в том, что в каждом цикле к каждой текущей прямой дорисовывается треугольник по середине, а также, все 4 новые получившиеся линии сохраняются в массив. В каждой следующей итерации, то же самое происходит со всеми отрезками из массива. Цикл повторяется заданное количество раз. В итоге получается, по сути, не совсем правильная кривая Коха, а её «черновой» аналог, с «не затертой» линией середины каждого отрезка. Результат получается такой:
-
Рекурсивный алгоритм (функция drawCurveKochRecur, исходный код java ниже) — рисует уже действительно только кривую, без черновых линий. Этот алгоритм использует те же математические расчеты, но его преимущество в том, что, за счет рекурсии, можно прорисовывать лишь те линии, которые представляют именно кривую. Вот результат этого алгоритма:
При желании и тот и другой алгоритм можно настроить на выдачу одинаковых результатов — с линиями оснований треугольников или без них.
Функции рисования кривых Коха позволяют формировать любые фигуры на основе этих кривых, какие вам только позволит фантазия. Вот несколько рисунков, исходный код каждого из которых представлен в примерах в самой программе ниже (examples):