Во-первых, давайте превратим это из нежизнеспособного фрагмента кода в работающую программу:
import turtle
from math import *
n = 1
d = 2
cur_r = 3
for i in range(n):
for a in range(1, 360, 4):
r = cur_r + d * a / 360.0
a *= pi / 180.0
x, y = r * cos(a), r * sin(a)
turtle.goto(x, y)
cur_r += d
turtle.mainloop()
Теперь давайте объясним это как можно лучше.Первый импорт:
import turtle # turtle graphics for plotting
from math import * # get trig routines sine and cosine plus pi constant
Следующие глобальные переменные:
n = 1 # number of revolutions around the spiral
d = 2 # growth factor (delta) for spiral radius (in 4 degrees steps)
cur_r = 3 # initial setting of current spiral radius
Код:
for i in range(n): # for each revolution of the spiral
for a in range(1, 360, 4): # angle from 1 to 359 in 4 degree steps
r = cur_r + d * a / 360.0 # new radius based on current one + delta
a *= pi / 180.0 # convert angle from degrees to radians
x, y = r * cos(a), r * sin(a) # get cartesian coordinates from polar
turtle.goto(x, y) # draw a line from previous point to this one
cur_r += d # add delta to current radius before repeating process
turtle.mainloop() # turn control over to tkinter's event handler
Ошибки:
for a in range(1, 360, 4):
Вероятно, должны иметьБыло:
for a in range(0, 360, 4):
, и '4', вероятно, должна была быть дополнительной переменной, а не жестко закодированной.Поскольку мы уже импортируем все из математической библиотеки:
a *= pi / 180.0
можно было бы написать:
a = radians(a)
Не ясно, что делает эта строка:
r = cur_r + d * a / 360.0
, который выполняет больше, чем просто:
r = cur_r
, поскольку d * a / 360.0
находится в диапазоне от d/360
до 'd'.Пересмотренный код:
import turtle
from math import cos, sin, radians
revolutions = 1
delta = 2
radius = 3
steps = 4
for i in range(revolutions):
for angle in range(0, 360, steps):
angle = radians(angle)
x, y = radius * cos(angle), radius * sin(angle)
turtle.goto(x, y)
radius += delta
turtle.mainloop()