turtle画图实例之 胖头鱼骨图
2022-06-24 本文已影响0人
小鱼儿_yzh
胖头鱼骨效果图:
胖头鱼骨图动画演示动画效果:
分析:
整个图分为鱼尾、鱼刺、鱼头、鱼眼四部分。
从鱼尾开始,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()