Python 我怎样用海龟画这个形状?
我今天在一个学习小组中遇到了一个挑战,要在python turtle库中绘制这个形状 我想不出一种表达几何解的方法,来找到我需要的转弯角度和线的大小 你能告诉我如何单独画第一个多边形吗?我已经知道如何制作图案了 我上五年级。因此,请给我一个我能理解的解决方案。以下是解决方案:Python 我怎样用海龟画这个形状?,python,turtle-graphics,python-turtle,Python,Turtle Graphics,Python Turtle,我今天在一个学习小组中遇到了一个挑战,要在python turtle库中绘制这个形状 我想不出一种表达几何解的方法,来找到我需要的转弯角度和线的大小 你能告诉我如何单独画第一个多边形吗?我已经知道如何制作图案了 我上五年级。因此,请给我一个我能理解的解决方案。以下是解决方案: 这是我提出的解决方案。它基于此图: 数学背景 我的解决方案使用了“三角法”,这是一种根据三角形另一侧的长度和角度计算三角形一侧长度的方法。这是高等数学,我希望在九年级或十年级时教。我不希望五年级的人知道三角学。我也不能解
这是我提出的解决方案。它基于此图: 数学背景 我的解决方案使用了“三角法”,这是一种根据三角形另一侧的长度和角度计算三角形一侧长度的方法。这是高等数学,我希望在九年级或十年级时教。我不希望五年级的人知道三角学。我也不能解释三角学的每一个细节,因为我需要写很多东西,而且我认为我没有足够的教学技能来解释清楚。我建议您观看本视频,了解该方法: 你也可以向你的老师询问更多信息,或者自己在互联网上进行研究 步骤1:计算角度 我们可以不用三角学来做这件事 首先,我们看到中间有一个“五角大厦”(5边多边形)。我想知道这个“五边形”角的内角。我把这个角度称为X: 我们如何计算角度
X
?我们首先记得三角形内角之和是180°。我们可以将一个5边多边形分成5-2
三角形,如下所示:
这些5-2
三角形的内角之和为180°
。因此,对于整个5边多边形,内角之和为180°*(5-2)
。由于所有角度大小相同,因此每个角度180°*(5-2)/5=108°
。所以我们有X=108°
另一侧的角度与X
相同。这允许我们计算两个X
之间的角度。我将此角度称为Y:
由于整圈是360°
,我们知道360°=2*X+2*Y
。因此,Y=(360°-2*X)/2
。我们知道,X=108°
,所以我们得到Y=72°
接下来,我们看到一个三角形,包含Y
角度。我想知道三角形另一角的角度Z
:
三角形的内角之和为180°*(3-2)=180°。因此,我们知道180°=2*Y+Z
,所以Z=180°-2*Y
。我们知道Y=72°,所以我们得到Z=36°
我们将经常使用角度Z
。你可以看到绿色星星的每个角落都有角度Z
。蓝星与绿星相同,只是它是旋转的,所以所有蓝色的角点都有角度Z
。红星的角是绿星和蓝星角的两倍宽,因此红星的角具有角度2*Z
步骤2:计算长度
首先,我们观察到所有外角都在一个圆上。我们称这个圆的半径为R
。我们不必计算R
。相反,我们可以为R
取任何想要的值。我们总是会得到相同的形状,但大小不同。我们可以将R
称为形状的“参数”
给定R
的一些值,我想知道以下长度:
计算A
:
我们从A
开始。我们可以看到以下三角形:
三角形的长边是我们的半径R
。另一侧有长度A/2
,我们不关心第三方。最右角的角度为Z/2
(其中Z=36°
是我们在上一节中计算的角度)。角度S
是直角,因此S=90°
。我们可以计算第三个角度T
,因为我们知道三角形的内角之和为180°
。因此,180°=S+Z/2+T
。求解T
,我们得到T=180°-S-Z/2=180°-90°-36°/2=72°
接下来,我们使用三角法计算A/2
。三角学告诉我们A/2=R*sin(T)。加入T
的公式,我们得到A/2=R*sin(72°)
。求解A
,我们得到A=2*R*sin(72°)
如果为R
选择一些值,例如R=100
,现在可以使用此公式计算A
。你需要一个计算器来计算sin(72°),因为在你的头脑中计算这个是非常困难的。把sin(72)
放入我的计算器,我得到0.951056516
。因此,对于我们的选择,R=100
,我们知道A=2*R*sin(72°)=2*100*0.951056516=190.211303259
计算B
:
我们使用相同的技术来找到B
的公式。我们看到以下三角形:
所以底部是半径的长度R
。右侧为B/2
。我们不关心第三方。最右边的角度是Z/2的三倍。角度S
是直角,因此我们有S=90°
。我们可以用180°=S+T+3*Z/2
计算剩余角度T
。求解T
,我们得到T=180°-S-3*Z/2=180°-90°-3*36°/2=36°
。好的,所以T=Z,我们也可以从图片中看到,但现在我们已经计算了
利用三角学,我们知道B/2=R*sin(T)
import turtle
#turtle.tracer(0)
a = turtle.Turtle()
for _ in range(10):
a.forward(100)
a.right(90)
a.forward(73)
a.right(72)
a.forward(73)
a.backward(73)
a.right(108)
a.forward(73)
a.right(90)
a.penup()
a.forward(100)
a.pendown()
a.forward(100)
a.right(108)
#turtle.update()
from turtle import Screen, Turtle
KITES = 10
RADIUS = 100
def kite(t):
t.right(37)
t.forward(100)
t.right(81)
t.forward(170)
t.right(124)
t.forward(170)
t.right(81)
t.forward(100)
t.right(37)
turtle = Turtle()
turtle.penup()
turtle.sety(-RADIUS)
for _ in range(KITES):
turtle.circle(RADIUS, extent=180/KITES)
turtle.pendown()
kite(turtle)
turtle.penup()
turtle.circle(RADIUS, extent=180/KITES)
turtle.hideturtle()
screen = Screen()
screen.exitonclick()
from turtle import Screen, Turtle
turtle = Turtle()
turtle.hideturtle()
turtle.penup() # center on the screen
turtle.setposition(-170, -125)
turtle.pendown()
for _ in range(10):
turtle.forward(340)
turtle.left(126)
turtle.forward(400)
turtle.left(126)
screen = Screen()
screen.exitonclick()
for _ in range(10):
turtle.width(4)
turtle.forward(105)
turtle.width(1)
turtle.forward(130)
turtle.width(4)
turtle.forward(105)
turtle.left(126)
turtle.width(1)
turtle.forward(76.5)
turtle.width(4)
turtle.forward(76.5)
turtle.width(1)
turtle.forward(94)
turtle.width(4)
turtle.forward(76.5)
turtle.width(1)
turtle.forward(76.5)
turtle.left(126)
for _ in range(10):
turtle.pendown()
turtle.forward(105)
turtle.penup()
turtle.forward(130)
turtle.pendown()
turtle.forward(105)
turtle.left(126)
turtle.penup()
turtle.forward(76.5)
turtle.pendown()
turtle.forward(76.5)
turtle.penup()
turtle.forward(94)
turtle.pendown()
turtle.forward(76.5)
turtle.penup()
turtle.forward(76.5)
turtle.left(126)
from turtle import *
for _ in range(2):
for _ in range(10):
fd(105)
lt(90)
fd(76.5)
pu()
bk(153)
rt(54)
pd()
lt(72)
lt, rt = rt, lt
done()
from turtle import *
for f, t in [(0,-72),(71,108),(71,0)]*10+[(29,90),(73,72),(73,90),(29,72)]*10:fd(f),rt(t)