Python 我怎样用海龟画这个形状?

Python 我怎样用海龟画这个形状?,python,turtle-graphics,python-turtle,Python,Turtle Graphics,Python Turtle,我今天在一个学习小组中遇到了一个挑战,要在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)