gpt4 book ai didi

python 海龟 : Two ends of a 180 arc do not coincide?

转载 作者:行者123 更新时间:2023-12-02 09:37:59 27 4
gpt4 key购买 nike

我正在尝试一项练习,要求我在Python中使用turtle绘制字母表中的字母。到目前为止,我认为我对如何使用前/后距离和旋转角度绘制直线、曲线和形状有了很好的理解。

我正在尝试绘制字母“B”,这是我的设计:

图1:
Figure 1

请注意,所有黑线的距离相等,并且圆弧的直径也等于 1 条黑线。这是我的不完整功能:

def arc(t, r, angle, n):
arc_length = 2*math.pi*r*(angle/360)
def polyline(t, length, n):
for i in range(n):
t.fd(length/n)
t.lt(angle/n)
polyline(t, arc_length, n)

def draw_b(t):
t.fd(30)
arc(t, 30, 180, 10)
t.fd(30)
t.lt(90)
t.fd(30)
t.bk(60)

它应该给我两条由底部弧线连接的完全平行的线,但我得到的是:

图2:
Figure 2

忽略不完整的顶部,如何解决这个问题,即圆弧的两端明显不重合,从而留下短“尾部”?我做错了什么吗?

最佳答案

您可以使用 range(n+1) 在末尾绘制额外的 fd() 但随后您必须返回 t.lt( -角度/n)。或者保留 range(n) 并在循环后绘制额外的 fd() 而无需 lt()

def polyline(t, length, n):
for i in range(n):
t.fd(length/n)
t.lt(angle/n)
t.fd(length/n) # <--- extra `fd()` without `lt()`
<小时/>
import turtle
import math

def arc(t, r, angle, n):
length = 2*math.pi*r*(angle/360)
for i in range(n):
t.fd(length/n)
t.lt(angle/n)
t.fd(length/n)

def draw_b(t):
for _ in range(2):
t.fd(30)
arc(t, 30, 180, 10)
t.fd(30)
t.lt(90)
t.fd(60)
t.bk(60)
t.lt(90)

draw_b(turtle.Turtle())
<小时/>

编辑:在以前的版本中我使用fd() N+1次,和lf() N次,但看起来更好当有 lf()angle/2 时,接下来的 fd()lf() N 次,最后是 lf()-angle/2。如果您只绘制具有 3 段的arc,那么您会发现它看起来更好。

import turtle
import math

def arc(t, r, angle, n):
length = 2*math.pi*r*(angle/360)

t.lt((angle/n)/2)

for i in range(n):
t.fd(length/n)
t.lt(angle/(n))

t.lt((-angle/n)/2)

def draw_b(t):
for _ in range(2):
t.fd(30)
arc(t, 30, 180, 10)
t.fd(30)
t.lt(90)
t.fd(60)
t.bk(60)
t.lt(90)

t = turtle.Turtle()
arc(t, 30, 180, 3)
#draw_b(t)
<小时/>

对于 n=3

第一个版本绘制 4 段

enter image description here

第二个版本绘制 3 段

enter image description here

<小时/>

顺便说一句: gallery with other images created with turtle

图像代码位于其他页面,但页面尚未翻译成英文。

关于 python 海龟 : Two ends of a 180 arc do not coincide?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60540599/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com