美文网首页Python 专题
turtle画图实例之 胖头鱼骨图

turtle画图实例之 胖头鱼骨图

作者: 小鱼儿_yzh | 来源:发表于2022-06-24 20:46 被阅读0次

效果图:

胖头鱼骨

动画效果:

胖头鱼骨图动画演示

分析:

整个图分为鱼尾、鱼刺、鱼头、鱼眼四部分。
从鱼尾开始,fd 画出一条钱,然后 goto 坐标来完成一半的鱼尾,另一半同样的画法。
鱼骨的水平线用 fd 来完成,上下两根鱼刺用重复用自定义函数来完成,改变变量 g 的值可以画不同数量的鱼刺。
鱼头经过好几次的改版,代码行数越来越少。第3版是在最后一个鱼刺尾端改变角度画一个240度的弧形。好胖的鱼头!!
鱼眼的坐标确定是个难点,我是在最后一对鱼刺画完后读取坐标值,然后在这个基本上平移来确定鱼眼的起笔位置。
欧了,上代码!

代码:

from turtle import *
#画鱼骨函数
def draw(d):
    seth(120)
    fd(d)
    backward(d)
    seth(-120)
    fd(d)
    backward(d)
#开始主程序    
speed(3)
width(3)
x,y=-200,0 #起笔坐标
pu()
goto(x,y)
pd()
#鱼尾
seth(120)
fd(50)
goto(x+50,y)
up()
goto(x,y)
pd()
seth(-120)
fd(50)
goto(x+50,y)
#鱼刺
g=6  #鱼骨刺对数
for i in range(g+1):
    seth(0)
    fd(40)
    draw(50+i*5)
#获得鱼头中心点的坐标,用于确定鱼眼坐标
x=xcor() 
y=ycor()
'''
#鱼头第2版
seth(0)
pu()
fd(85)
pd()
seth(90)
circle(85,120)
pu()
goto(x,y)
pd()
seth(90)
circle(85,-120)
'''
#鱼头第3版
fd(50+i*5)
lt(90)
circle(50+i*5,240)
#鱼眼
pu()
goto(x+(50+i*5)/2,y)
seth(90)
pd()
circle(10)
ht()

done()

相关文章

网友评论

    本文标题:turtle画图实例之 胖头鱼骨图

    本文链接:https://www.haomeiwen.com/subject/ntpvvrtx.html