Как мне рисовать полигоны вокруг центральной точки в python turtle

#python #python-3.x #shapes #python-turtle

#python #python-3.x #фигуры #python-turtle

Вопрос:

я хочу определить эту функцию таким образом, чтобы пользователь мог вводить любое количество сторон, длину и координаты. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы координаты были центром многоугольника, а не углом, но я не уверен, как это сделать. Ниже приведен мой текущий код

 import turtle

WIDTH,HEIGHT= 1200,700
screen = turtle.Screen()
screen.setup(WIDTH,HEIGHT)

def draw_polygon(x,y,sides,length):
    pen=turtle.Turtle()
    pen.hideturtle()
    pen.speed(-1)
    pen.penup()
    pen.setpos(x,y)
    pen.pendown()
    for i in range (0,sides):
        pen.fd(length)
        pen.right(360/sides)

while True:
    s=int(input())
    l=int(input())
    draw_polygon(0,0,s,l)
  

Ответ №1:

Черепаха начинает рисовать с заданной позиции, поскольку вы рисуете по часовой стрелке, это означает, что заданная позиция всегда будет верхним левым углом многоугольника. Чтобы сделать позицию, которую вы передаете в функцию, центром, вы должны сместить начальную позицию черепахи.

Пример смещения для пятиугольника

Смещение по оси x всегда будет составлять половину длины одной стороны, приближаясь к нулю, когда многоугольник приближается к окружности.

Смещение по оси y будет радиусом многоугольника.

В вашем коде замените заданную позицию, чтобы соответствующим образом сместить начальную позицию черепахи.

 from math import pi

startPosX = x - length/2
startPosY = y   length * sides / (2*pi)
pen.setpos(startPosX,startPosY)
  

В боковой заметке вы можете добавить:

 turtle.Screen().exitonclick()
  

в конце drawPolygon() вместо вашего цикла while, чтобы сохранить экран после ввода ваших значений.