Interested Article - Кривая Госпера
- 2021-06-05
- 1
Крива́я Го́спера , или крива́я Пеа́но-Го́спера , названная по имени открывателя Билла Госпера , — это заполняющая пространство кривая . Является фрактальной кривой, подобной кривым дракона и Гильберта .
Четвёртая стадия кривой Госпера | Ломаная линия от красной точки до зелёной показывает один шаг построения кривой Госпера. |
Алгоритм
Система Линденмайера
Кривую Госпера можно представить с помощью системы Линденмайера со следующими правилами:
- Угол: 60°
- Аксиома:
-
Правила подстановки:
В этом случае A и B означают движение вперёд, + означает поворот влево на 60º, а — означает поворот на 60º вправо с использованием «черепашьего» стиля программирования, как в Лого или Python3 .
Лого
Программа на
Лого
для рисования кривой Госпера с использованием
черепашьей графики
(
):
to rg :st :ln
make "st :st - 1
make "ln :ln / sqrt 7
if :st > 0 [rg :st :ln rt 60 gl :st :ln rt 120 gl :st :ln lt 60 rg :st :ln lt 120 rg :st :ln rg :st :ln lt 60 gl :st :ln rt 60]
if :st = 0 [fd :ln rt 60 fd :ln rt 120 fd :ln lt 60 fd :ln lt 120 fd :ln fd :ln lt 60 fd :ln rt 60]
end
to gl :st :ln
make "st :st - 1
make "ln :ln / sqrt 7
if :st > 0 [lt 60 rg :st :ln rt 60 gl :st :ln gl :st :ln rt 120 gl :st :ln rt 60 rg :st :ln lt 120 rg :st :ln lt 60 gl :st :ln]
if :st = 0 [lt 60 fd :ln rt 60 fd :ln fd :ln rt 120 fd :ln rt 60 fd :ln lt 120 fd :ln lt 60 fd :ln]
end
Программу можно запустить, например, командой
rg 4 300
или
gl 4 300
.
Python3
import turtle
turtle.hideturtle()
turtle.tracer(0)
turtle.penup()
turtle.setposition(180, 240)
turtle.pendown()
axiom, tempAx, logic, iterations = 'A', '', {'A': 'A-B--B+A++AA+B-', 'B': '+A-BB--B-A++A+B'}, 5
for i in range(iterations):
for j in axiom:
tempAx += logic[j] if j in logic else j
axiom, tempAx = tempAx, ''
for k in axiom:
if k == '+':
turtle.left(60)
elif k == '-':
turtle.right(60)
else:
turtle.forward(4)
turtle.update()
turtle.mainloop()
Свойства
Заполненные кривой фрагменты плоскости называются островами Госпера . Несколько первых итераций приведены ниже:
Остров Госпера может замостить плоскость . Фактически, семь копий острова Госпера можно соединить вместе с образованием похожей фигуры, но увеличенной на множитель √7 во всех направлениях. Как видно из рисунка ниже, эта операция приводит к уменьшенной версии следующей итерации кривой. Продолжение процесса бесконечно даёт замощение плоскости. Сама кривая может быть равным образом расширена на бесконечность с заполнением всей плоскости.
См. также
Примечания
- Weisstein, Eric W. . MathWorld . Дата обращения: 31 октября 2013. 20 апреля 2019 года.
Ссылки
- от 21 марта 2012 на Wayback Machine
- (in French)
- от 24 июля 2011 на Wayback Machine
- 2021-06-05
- 1