Кривая дракона
Кривая дракона — общее название для некоторых фрактальных кривых, которые могут быть аппроксимированы рекурсивными методами, такими как L-системы.
Дракон Хартера — Хейтуэя
Дракон Хартера, также известный как дракон Хартера — Хейтуэя, был впервые исследован физиками NASA — Джоном Хейтуэем (John Heighway), Брюсом Бэнксом (Bruce Banks), и Вильямом Хартером (William Harter). Он был описан в 1967 году Мартином Гарднером в колонке «Математические игры» журнала «Scientific American». Многие из свойств фрактала были описаны Чендлером Дэвисом (Chandler Davis) и Дональдом Кнутом.
Фрактал может быть записан как L-система с параметрами:
- угол равен 90° или pi/2
- начальная строка — FX
- правила преобразования строк:
- X [math]\displaystyle{ \mapsto }[/math] X+YF+
- Y [math]\displaystyle{ \mapsto }[/math] -FX-Y
Кроме того, фрактал может быть описан системой итерируемых функций на комплексной плоскости:
- [math]\displaystyle{ f_1(z)=\frac{(1+i)z}{2} }[/math]
- [math]\displaystyle{ f_2(z)=1-\frac{(1-i)z}{2} }[/math].
Берём отрезок, сгибаем его пополам. Затем многократно повторяем итерацию. Если после этого снова разогнуть получившуюся (сложенную) линию так, чтобы все углы были равны 90°, мы получим драконову ломаную.
Примеры
import turtle
turtle.hideturtle()
turtle.tracer(0)
turtle.penup()
turtle.setpos(-100, -150)
turtle.pendown()
axiom, tempAx, logic, count = 'FX', '', {'X': 'X+YF+', 'Y': '−FX−Y'}, 15
for i in range(count):
for j in axiom:
tempAx += logic[j] if j in logic else j
axiom, tempAx = tempAx, ''
for k in axiom:
if k == 'F':
turtle.forward(2.5)
elif k == '+':
turtle.right(90)
elif k == '−':
turtle.left(90)
turtle.update()
turtle.mainloop()
Ссылки
- Фракталы на сайте Алгоритмы
- Weisstein, Eric W. Кривая дракона (англ.) на сайте Wolfram MathWorld.
- Кривая дракона и складывание бумаги