В разделе дизайна интерфейса в "Think Python" мне нужна помощь в понимании подхода к функциям круга и дуги, например:
import turtle
import polygon
bob = turtle.Turtle()
print(bob)
def polygon(t, n, length):
angle = 360 / n
for i in range(n):
t.fd(length)
t.lt(angle)
И после этого в книге вводится другой подход к рисованию круга с использованием многоугольной функции:
def circle(t, r):
circumference = 2 * math.pi * r
n = int(circumference / 3 ) + 1
length = circumference / n
polygon(t, n, length)
Что я не понимаю:
Я понятия не имею, почему они определяют circumference
чтобы нарисовать круг и как он работает, чтобы нарисовать круг.
Если я вызову функцию, например circle(bob, 100)
то она будет рисовать только часть круга, а не весь круг.
Я не понимаю, зачем нужно n
, и как эта процедура может сделать круг.
Я понятия не имею, почему они определяют окружность, чтобы нарисовать круг, и как это сделать, чтобы нарисовать круг
Одним из способов визуализации круга является рисование многоугольника с числом сторон, равным (целочисленной) окружности круга, причем каждая сторона имеет длину 1. Для круга радиуса = 100 это будет:
polygon(bob, 628, 1) # 628 = 2 * PI * 100
который рисует хороший, но медленный круг:
Мы можем ускорить это, используя более грубое приближение. Функция circle()
выше произвольно делит число сторон, которые многоугольник будет иметь на 3, но затем увеличивает длину каждой стороны на 3:
polygon(bob, 209, 3)
Это просто зрелищный более грубый круг, но он стреляет быстрее:
Если я вызову функцию, например circle (bob, 100), то она будет рисовать только часть круга, а не весь круг.
Я считаю, что вы смешиваете функцию circle()
определенную выше, с помощью метода circle()
который поставляется с черепахой. Это путало автора повторного использования "круг" имени таким образом. Второй аргумент для метода circle()
черепахи - это степень:
протяженность - угол - определяет, какая часть круга нарисована. Если степень не указана, нарисуйте весь круг. Если степень не является полным кругом, одной конечной точкой дуги является текущее положение пера.
Поэтому вызов функции "Think Python":
circle(bob, 100)
рисует круг радиуса 100:
Метод черепахи:
bob.circle(100, 90)
рисует дугу (1/4 круга) на основе радиуса 100:
Я не понимаю, зачем нужно n, и как эта процедура может сделать круг.
n
- число сторон на многоугольнике, которое аппроксимирует окружность:
n = int(circumference / 3 ) + 1
length = circumference / n
polygon(t, n, length)
Начиная с радиуса 100, если мы заменим "3" выше на 1
, мы получим многоугольник с более (629) сторонами:
n = int(circumference / 1) + 1 # n = 629
length = circumference / n # length = 0.9989
или примерно:
polygon(t, 628, 1)
Иллюстрировано выше. Но если мы заменим "3" на "27", мы получим круг, аппроксимированный многоугольником из 24 сторон:
n = int(circumference / 27 ) + 1 # n = 24
length = circumference / n # length = 26.1799
Значение orignal '3' должно было стать дополнительным аргументом - в turtle.circle()
это примерно эквивалентно аргументу шагов:
Поскольку окружность аппроксимируется вписанным правильным многоугольником, этапы определяют количество шагов для использования. Если он не указан, он будет рассчитан автоматически. Может использоваться для рисования правильных многоугольников.
bob.circle(100, steps=12)