Понимание круга черепахи и дуги в «Думай Питон»

1

В разделе дизайна интерфейса в "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, и как эта процедура может сделать круг.

Теги:
turtle-graphics
circle

1 ответ

1

Я понятия не имею, почему они определяют окружность, чтобы нарисовать круг, и как это сделать, чтобы нарисовать круг

Одним из способов визуализации круга является рисование многоугольника с числом сторон, равным (целочисленной) окружности круга, причем каждая сторона имеет длину 1. Для круга радиуса = 100 это будет:

polygon(bob, 628, 1)  # 628 = 2 * PI * 100

который рисует хороший, но медленный круг:

Изображение 174551

Мы можем ускорить это, используя более грубое приближение. Функция circle() выше произвольно делит число сторон, которые многоугольник будет иметь на 3, но затем увеличивает длину каждой стороны на 3:

polygon(bob, 209, 3)

Это просто зрелищный более грубый круг, но он стреляет быстрее:

Изображение 174551

Если я вызову функцию, например circle (bob, 100), то она будет рисовать только часть круга, а не весь круг.

Я считаю, что вы смешиваете функцию circle() определенную выше, с помощью метода circle() который поставляется с черепахой. Это путало автора повторного использования "круг" имени таким образом. Второй аргумент для метода circle() черепахи - это степень:

протяженность - угол - определяет, какая часть круга нарисована. Если степень не указана, нарисуйте весь круг. Если степень не является полным кругом, одной конечной точкой дуги является текущее положение пера.

Поэтому вызов функции "Think Python":

circle(bob, 100)

рисует круг радиуса 100:

Изображение 174551

Метод черепахи:

bob.circle(100, 90)

рисует дугу (1/4 круга) на основе радиуса 100:

Изображение 174551

Я не понимаю, зачем нужно 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

Изображение 174551

Значение orignal '3' должно было стать дополнительным аргументом - в turtle.circle() это примерно эквивалентно аргументу шагов:

Поскольку окружность аппроксимируется вписанным правильным многоугольником, этапы определяют количество шагов для использования. Если он не указан, он будет рассчитан автоматически. Может использоваться для рисования правильных многоугольников.

bob.circle(100, steps=12)

Изображение 174551

  • 0
    Большое спасибо!!! очень благодарен за комментарий! Это мне очень помогает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню