首页 > 解决方案 > 多边形在python中划分为等腰三角形

问题描述

我想在python中绘制一个分为等腰三角形的多边形。我在下面尝试了这段代码,但变量内角似乎有错误。

为什么箭头向后移动?它应该向中心移动。请帮我找出错误。提前致谢。

import math
import turtle
bob = turtle.Turtle()

bob.speed(1)

def triangularpolygon (t,length,n):
    angle = (n-2)*180/n
    insideangle=angle/2
    rotatingangle=180-insideangle
    centrelength = length/2/math.cos(insideangle)
    t.fd(centrelength)
    for i in range(n):
        t.fd(length)
        t.lt(rotatingangle)
        t.fd(centrelength)
        t.bk(centrelength)
        t.rt(insideangle)

triangularpolygon(bob,100,6)

没有错误消息。我认为角度余弦的值为负。

标签: pythonpython-3.xpolygonturtle-graphics

解决方案


我相信你的乌龟向错误的方向移动,而且还不够远,因为你的数学是错误的。您将度数(海龟的默认值)与弧度(math.cos() 期望值)混合:

angle = (n-2)*180/n
insideangle=angle/2
centrelength = length/2/math.cos(insideangle)

您的cos()呼叫返回负值 -forward()负值是backward(),反之亦然。让我们重新计算数学并将turtle切换为弧度(不是必需的,但使代码保持一致):

from math import pi, sin as sine
from turtle import Screen, Turtle

def triangular_polygon(turtle, length, n):
    inside_angle = (n - 2) * pi / n / 2
    rotating_angle = pi - inside_angle
    radius = length / (2 * sine(pi / n))

    turtle.penup()
    turtle.forward(radius)
    turtle.left(rotating_angle)
    turtle.pendown()

    for _ in range(n):
        turtle.forward(length)
        turtle.left(rotating_angle)
        turtle.forward(radius)
        turtle.backward(radius)
        turtle.right(inside_angle)

screen = Screen()

bob = Turtle()
bob.radians()  # switch turtle to radians to match math functions
bob.speed('slowest')
bob.dot()  # mark the center of our screen for reference

triangular_polygon(bob, 100, 6)

bob.hideturtle()
screen.exitonclick()

在此处输入图像描述


推荐阅读