#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/стороны)
И запустите программу:
форма(стороны)