Pull to refresh

Кривые дракона и черепашка

Reading time2 min
Views6.1K
кривые дракона
Существует замечательное и буквально завораживающее семейство фрактальных кривых — кривые дракона. Кто не знаком с ними принцип их построения проще всего объяснить при помощи полоски бумаги. Итак, возьмём полоску бумаги и сложим её несколько раз пополам, а затем развернем так чтобы между углами сгиба образовались прямые углы. В итоге мы получим кривую дракона. Поскольку толщина сложенной полоски каждый раз удваивается, а длина отдельного звена уменьшается в два раза, то мы не можем получить таким наивным способом длинных кривых.
К счастью длинные кривые легко рисуются другим способом, а точнее множеством способов. В частности, в Сети можно встретить рекурсивную программу порождающую кривую дракона достраивая катеты к отрезкам исходной кривой, как гипотенузам. Но я решил поручить это дело черепашке. Поскольку кривая дракона состоит из серии поворотов «налево» и «направо», то черепашка должна уметь только делать шаг в перёд и поворачивать. Главное, что я хотел увидеть — это сплетение кривых дракона. Да! Эти кривые сочетаются между собой в разных и интересных позициях, что кажется невероятным для таких сложных и запутанных кривых.

Итак, передо мной встала задача получить «имя» дракона — строку кодирующую последовательность поворотов. Я опишу здесь простейший и наиболее очевидный способ. Поскольку кривая получается складыванием полоски бумаги, то кривые проведённые из точки последнего сгиба должны совпадать при повороте на 90 градусов. Другими словами, дойдя до конца кривой черепашка должна повернуть на 90 и повторить свой путь в обратном порядке, так как будто она возвращалась в исходную точку. Это отнюдь не единственный способ получить искомую последовательность поворотов. Если вам интересно, то можно поразмыслить, как получать эту последовательность исходя из вышеописанного рекурсивного порождения кривой дракона построением катетов.
Кстати, точки «сгиба», в которых происходит удвоение кривой дракона, лежат на логарифмической спирали, и кривая делает полный оборот вокруг себя за восемь удвоений.
Итак у нас есть «черепашка» и есть «имя дракона». Пришло время посмотреть на «совокупление» драконов.

Здесь сплетаются две кривые дракона: pastebin.me/e8440d992354f3e16479ca6f2a006c5c

А здесь происходит слияние сразу четырёх кривых: pastebin.me/e8440d992354f3e16479ca6f2a004bf4

Не знаю кому как, но меня сплетения 4 кривых завораживает.

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

ЗЫ. Буду благодарен комментариям от людей профессионально программирующих на Javascript комментариям в личку по поводу моего кода. Я самоучка, так что правила оформления не соблюдал.
Tags:
Hubs:
Total votes 43: ↑36 and ↓7+29
Comments24

Articles