Была такая популярная форма программирования для начинающих «черепашка». У нас будет базовая версия, которая умеет 1) двигаться прямо, оставляя след; 2) поворачиваться (на месте) на указанный угол.
Можно написать что-нибудь типа
import math
import matplotlib.pyplot as plt
x, y, phi = 0, 0, 0
def move(s=1,color='blue'):
global x, y
x0, y0 = x, y
x = x0 + s*math.cos(phi)
y = y0 + s*math.sin(phi)
plt.plot([x0,x],[y0,y],color=color)
def turn(s):
global phi
phi += s*2*math.pi
for k in range(100):
move()
turn(1/100)
plt.gca().set_aspect('equal')
plt.show()
и увидеть на экране окружность. Ну… тоже приятно, но не особо интересно.
Забавно, что содержательные вещи буквально в одном шаге от такого. Например, можно вместо move() написать move(<функция от k>) и смотреть, как черепашка занимается преобразованием Фурье.
Но мы лучше оставим сдвиги одинаковыми, а вот поворот пусть растет линейно со временем. Вот на картинке результат
p = 101
for k in range(p):
move()
turn((2*k+1)/p)
Можно задавать вопросы… например, далеко ли черепашка уйдет от начала координат при разных p? Тут есть несколько уровней 1) экспериментальный; 2) эмпирическая прикидка в вероятностном духе для большого p; 3) точный ответ для произвольного p.
Можно, кстати, от 2) пойти чуть-чуть в другую сторону и смотреть для больших p на всю форму кривой (а не только на то, далеко ли мы уйдем). Видим мы, на самом деле, спирали Корню (=кривизна пропорциональна пройденному расстоянию).
***
Напомнил о таком сюжете недавно коллега Гусарев, а еще чуть раньше про это писал
