python - 多边形在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()
推荐阅读
- docker - 将文件上传到在 Docker 容器上运行的 eXist-db
- python - 无法访问 jarfile XYZ.jar
- php - 如果有东西引用它,如何防止用户从数据库中删除一行
- c# - 如何通过 EF6 将 SQLQuery 转换为 SortedList
- java - 表情符号被替换为“?” 解析whatsapp聊天文本文件时。如何将它们解析为正常的 UTF-8 或 UTF-16 编码?
- java - Java 8 CustomizedThread::new 等于 new CustomizedThread()?
- django - 将 Spotfire 嵌入 Django
- c# - 如何使用 Linq 生成树视图
- hazelcast - Hazelcast:IMap 作为单例以及如何配置 TTL
- java - 我可以运行以字符串形式存储在 Json 对象中的 Java 代码吗?