在 python 中分成等腰三角形的多边形
Polygon divided into isosceles triangle in 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)
没有错误消息。我认为角度的余弦值为负。
我相信你的乌龟走错了方向,而且还不够远,因为你的数学有误。您将度数(乌龟的默认值)与弧度(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()
我想在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)
没有错误消息。我认为角度的余弦值为负。
我相信你的乌龟走错了方向,而且还不够远,因为你的数学有误。您将度数(乌龟的默认值)与弧度(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()