[В следующем обсуждении я использую библиотеку черепах, которая поставляется с Python, а не TurtleWorld, поэтому настройте ее соответствующим образом.] Из онлайнового документа ThinkPython PDF:
Упражнение 4.5. Читайте о спиралях в http://en.wikipedia.org/wiki/Spiral;
затем напишите программу, которая рисует архимедову [sic] спираль (или одну
других видов). Решение: http://thinkpython.com/code/spiral.py
Если мы перейдем по ссылке Википедии от Спираль до Архимедова спираль , мы получим формулу r = a + b * theta
, которая, естественно, хочет быть вычислена в полярных координатах и построена в декартовой системе координат. координаты:
def spiral(turtle, rotations=6, a=0.0, b=5):
theta = 0.0
while theta < rotations * 2 * pi:
radius = a + b * theta
x, y = radius * cos(theta), radius * sin(theta)
turtle.goto(x, y)
theta += 0.1
Где a
контролирует начальный угол спирали, а b
контролирует расстояние между витками :
![enter image description here](https://i.stack.imgur.com/fh0jK.png)
Но решение, которое предлагает ThinkPython, отличается:
Чтобы избавиться от pi
, sin()
и cos()
от math.py, он изображает черепаху на спирали и то, как выглядит каждое движение по этой спирали. Он вводит n
, который представляет количество отрезков линии, и length
длину этих сегментов. Переменная b
по-прежнему означает примерно то же самое, хотя и в другом масштабе, а a
представляет, насколько плотно начинается начальная спираль. Опять же, мы начинаем с:
theta = 0.0
Но вместо того, чтобы зацикливаться на количестве полных вращений, мы зацикливаемся до n
, количества сегментов для рисования. Так что n
должно быть большим, например 1000 вместо 5 в вашем коде. На каждой итерации мы перемещаемся вперед length
пикселей, а затем вычисляем новый угол дельта для поворота на основе a
, b
и theta
:
delta = 1 / (a + b * theta)
Мы поворачиваемся на эту небольшую сумму, а также добавляем эту сумму к theta
непосредственно перед повторным циклом. В этом подходе a
и b
обычно меньше 1, но ненулевые:
![enter image description here](https://i.stack.imgur.com/hlTQP.png)
Вы можете видеть по ориентации черепахи на двух изображениях, что на первом изображены только точки, поэтому ориентация черепахи незначительна, но на втором мы движемся по спирали, поэтому черепаха всегда указывает в направлении растущая спираль. Я надеюсь, что это обсуждение двух подходов поможет вам.