Крива́я Го́спера, или крива́я Пеа́но-Го́спера, названная по имени открывателя Билла Госпера, — это заполняющая пространство кривая. Является фрактальной кривой, подобной кривым дракона и Гильберта.

Четвёртая стадия кривой Госпера Ломаная линия от красной точки до зелёной показывает один шаг построения кривой Госпера.

Алгоритм

Система Линденмайера Кривую Госпера можно представить с помощью системы Линденмайера со следующими правилами: Угол: 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 во всех направлениях. Как видно из рисунка ниже, эта операция приводит к уменьшенной версии следующей итерации кривой. Продолжение процесса бесконечно даёт замощение плоскости. Сама кривая может быть равным образом расширена на бесконечность с заполнением всей плоскости.

См. также

Примечания

Ссылки https://web.archive.org/web/20060112165112/http://kilin.u-shizuoka-ken.ac.jp/museum/gosperex/343-024.pdf http://kilin.clas.kitasato-u.ac.jp/museum/gosperex/343-024.pdf https://www.mathcurve.com/fractals/gosper/gosper.shtml (in French) https://mathworld.wolfram.com/GosperIsland.html http://logo.twentygototen.org/mJjiNzK0 http://80386.nl/projects/flowsnake/

Категория:Фрактальные кривые