使用turtle模块使用特定规格绘制彼此内部的规则多边形

2024-05-16 11:37:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个函数,它可以在彼此之间绘制规则多边形,如所附图片所示。多边形边的大小由以下公式定义:

initial_size = initial_radius*(2*math.sin(360/(2*number_of_angles)))

我有两个问题:1。为什么当我用上述公式指定“初始尺寸”时,我的绘图从不同的方向开始,而不是简单地指定初始尺寸=100(忽略公式)?2.你能给我一个提示(或任何方向)吗?我可以像图上那样画正多边形(即,从不同的点开始(沿x轴移动),然后在另一个多边形内画每个多边形

enter image description here

import turtle 
import math
turtle.speed(1)

def reg_polygon(number_of_angles, initial_radius):
Q = 180-(180/number_of_angles)/2
turtle.left(Q)    

initial_size = initial_radius*(2*math.sin(360/(2*number_of_angles)))
if number_of_angles>=3:
    sum_angle = 180*(number_of_angles-2)
    angle = sum_angle/number_of_angles
    for i in range(number_of_angles):
        turtle.forward(initial_size)
        turtle.left(180-angle)
elif number_of_angles<3:    
    print("Minimum number of angels should be >=3")

    
for i in range(3,6):
 reg_polygon(i,100) 
turtle.done()    

Tags: ofimportnumbersize尺寸mathsin方向
1条回答
网友
1楼 · 发布于 2024-05-16 11:37:39

下面是以下代码片段所绘制的内容:;这并不是你发布的gif的绝对完美复制(必须对3、4和5角的大小顺序进行一些调整,以避免较小的邻居们在某些点接触-即gif制作者有点受骗!),但它遵循数学对称性和完美性

enter image description here

下面的代码有一些神奇的数字;我可能稍后再谈,但现在不行。我用来计算正多边形的资源可以找到herethere

import turtle 
import math


def reg_polygon(start_pos, number_of_angles, side):
    interior_angle = (180 * (number_of_angles - 2)) / number_of_angles
    turtle.setheading(180 - interior_angle//2)

    for i in range(number_of_angles):
        turtle.forward(side)
        turtle.left(180 - interior_angle)
    
def reset_start_point():
    global start_pos, startx, starty, initial_size, number_of_angles, side
    startx += 8
    starty -= 0
    initial_size += 8
    number_of_angles += 1
    side = 2 * initial_size * math.sin(math.radians(180/number_of_angles))
    start_pos = startx, starty
    turtle.penup()
    turtle.goto((startx, starty))
    turtle.pendown()
    
start_pos = startx, starty = 0, 0
number_of_angles = 2
initial_size = 15  # radius
side = 0

while number_of_angles < 21:
    reset_start_point()
    reg_polygon(start_pos, number_of_angles, side)
    
turtle.done()

相关问题 更多 >