Как установить для любого полигона одинаковую общую ширину

#python #geometry #turtle-graphics #python-turtle

#питон #геометрия #черепаха-графика #питон-черепаха

Вопрос:

Я не могу понять, как установить любой многоугольник (например, треугольник, десятиугольник, квадрат и т. Д.) Одинаковой «общей ширины» в python turtle.
У меня есть 2 определения:

 # To draw the shape def shape(sides):  for i in range(sides):  turtle.forward(20);  turtle.right(360 / sides);  # To move to the next shape def nextshape():  turtle.penup();  turtle.forward(50);  turtle.pendown();  

Проблема в том, что разница между различными формами варьируется в зависимости от того, сколько существует сторон.
Например, если бы я хотел нарисовать фигуру с 4 сторонами (квадрат), ее «общая ширина» (я бы сказал, диаметр, но я думаю, что это для кругов) составляла бы 20, потому что она рисует каждую сторону шириной 20. Однако, если я нарисую фигуру с 5 сторонами, ее «общая ширина» не будет равна 20 из-за количества сторон, что заставляет фигуру выходить наружу при ее рисовании.
Я хочу, чтобы «общая ширина» любой формы с любым количеством сторон была одинаковой.

Ответ №1:

Слово, которое вы ищете, — «периметр». Если я правильно понимаю, вы пытаетесь нарисовать произвольный n-сторонний многоугольник (треугольник при n=3, квадрат при n=4 и т. Д.) С Постоянным размером периметра. Периметр n-стороннего многоугольника равен n * length_of_side .

Поскольку вы хотите, чтобы периметр всех полигонов был одинаковым , вам нужно вычислить length_of_side , что просто perimeter / n

 PERIMETER = 20  def shape(sides):  for i in range(sides):  length_of_side = PERIMETER / sides  turtle.forward(length_of_side);  turtle.right(360 / sides);  

Ответ №2:

Я думаю, что ваша концепция «общей ширины» ошибочна. Если мы рассмотрим квадрат сторон 20 и подумаем о «общей ширине» как о «максимальной ширине», то угловые точки, наиболее удаленные друг от друга по периметру, находятся примерно на расстоянии 28 пикселей друг от друга (20 * sqrt(2)). Эта концепция «максимальной ширины» имеет смысл для полигонов, в отличие от «общей ширины». И это аналогично «диаметру», о котором вы упомянули.

Вот код для рисования многоугольников с различным количеством сторон с постоянным диаметром:

 import turtle  DIAMETER = 200  def shape(sides):  turtle.penup()  turtle.sety(-DIAMETER/2) # center polygon on turtle position  turtle.pendown()   turtle.circle(DIAMETER/2, steps=sides)  for sides in range(3, 13):  shape(sides)  turtle.done()  

Главное, вам нужно четко определить свою цель.

Ответ №3:

Вы должны начать с 1 многоугольника, так что (это треугольник)

стороны=3

форма защиты(стороны): для i в диапазоне(стороны): черепаха.вперед(какой длины сторона) черепаха.вправо(360/стороны)

И запустите программу:

форма(стороны)