Python 专题

turtle画图实例之 画圆形双喜字

2022-06-21  本文已影响0人  小鱼儿_yzh

效果图:

圆形双喜字

动画效果图:


圆形双喜字动画效果

分析:
用的还是剪纸的效果,先画一个红色的圆形,然后抠出白色的部分。
白色的部分有两种情况,一种是规则的矩形,用一个画矩形函数 draw_jx ( x , y , h , w)来完成。画矩形函数有四个函数,x 和 y 是矩形的左上角的坐标,至于为什么是左上角,是因为函数的画线过程一直右转,所以是从左上角开始画的。参数 h 画的矩形的高度,参数 w 是画的矩形的宽度。 每次调用函数时的 x , y , h , w 的值用下面的“位置分析图”计算出来。
下面的两个带圆弧形状的小口比较复杂,因为要与外圈的圆弧平行所以往左画一个44度的弧,再往右画一个44度的弧,然后画一条横线,构成一个白色区域,然后在中间画一个纵向的白色矩形,在两边分别补一个红色的矩形。
至于为什么是 44 度的弧,很不好意思,没有啥依据,就是试出来的,用44度和横线的长度去试,构成一个闭合形状形成填充效果。

位置分析图

代码:

from turtle import *

def draw_jx(x,y,h,w):
    up()
    goto(x,y)
    down()
    begin_fill()
    seth(0)
    fd(w)
    rt(90)
    fd(h)
    rt(90)
    fd(w)
    rt(90)
    fd(h)
    seth(0)
    end_fill()

#变量 
a=20 #笔画的最小数据
b=2 #画笔的大小
x = 0  # 初始 x 坐标值
y = -7.5*a  # 初始 y 坐标值

pensize(b)
color('red')
speed(10)

#画底色
up()
goto(x,y)
down()
begin_fill()
circle(7.5*a)
end_fill()

color('white')

#画 左侧 1
draw_jx(x-7.5*a,y+13*a,a,3*a)
#画 左侧 2
draw_jx(x-7.5*a,y+11*a,a,3*a)
#画 左侧 3 口
draw_jx(x-5.5*a,y+9*a,a,4*a)
#画 左侧 4
draw_jx(x-7.5*a,y+7*a,a,3*a)
#画 左侧 5
draw_jx(x-7.5*a,y+5*a,a,3*a)

# 右侧横向 1
draw_jx(x+4.5*a,y+13*a,a,3*a)
# 右侧横向 2
draw_jx(x+4.5*a,y+11*a,a,3*a)
# 右侧 横向 3 口
draw_jx(x+1.5*a,y+9*a,a,4*a)
# 右侧横向 4
draw_jx(x+4.5*a,y+7*a,a,3*a)
# 右侧横向 5
draw_jx(x+4.5*a,y+5*a,a,3*a)


# 中间横向 1
draw_jx(x-2.5*a,y+15*a,a,5*a)
# 中间横向 2
draw_jx(x-2.5*a,y+13*a,a,5*a)
# 中间横向 3
draw_jx(x-2.5*a,y+11*a,a,5*a)
# 中间纵向 上
draw_jx(x-0.5*a,y+10*a,3*a,a)
# 中间横向4
draw_jx(x-2.5*a,y+7*a,a,5*a)
# 中间横向5
draw_jx(x-2.5*a,y+5*a,a,5*a)

#下面的口
up()
goto(x,y+a)
down()
begin_fill()
circle(6.5*a,-44)
up()
goto(x,y+a)
seth(0)
down()
circle(6.5*a,44)
seth(-180)
fd(9*a)
end_fill()

# 中间纵向 下
draw_jx(x-0.5*a,y+4*a,4*a,a)
# 补色
color('red')
draw_jx(x-1.5*a,y+3*a,2*a,a-b)
draw_jx(x+0.5*a+b,y+3*a,2*a,a-b)

ht()
exitonclick()

上一篇下一篇

猜你喜欢

热点阅读