这里构造了一个旋转椭圆函数可以使得图案更加生动。
代码如下:
from turtle import *
from random import *
from math import *
speed(0)
pensize(2)
hideturtle()
#高级椭圆参数方程(颜色),sita为逆时针旋转角度
def ty_c(x,y,sita,a,b,p,q,c):
fillcolor(c)
si=2*pi/100
penup()
goto(x+a*cos(sita),y+a*sin(sita))
pendown()
t=0
for i in range(201):
if i*si+sita<p:
penup()
goto(x+a*cos(i*si)*cos(sita)-b*sin(i*si)*sin(sita)\
,y+a*cos(i*si)*sin(sita)+b*sin(i*si)*cos(sita))
pendown()
elif p<=i*si+sita<=q :
if t==0:
begin_fill()
t=1
goto(x+a*cos(i*si)*cos(sita)-b*sin(i*si)*sin(sita)\
,y+a*cos(i*si)*sin(sita)+b*sin(i*si)*cos(sita))
end_fill()
#高级椭圆方程
def ty(x,y,sita,a,b,p,q):
si=2*pi/100
penup()
goto(x+a*cos(sita),y+a*sin(sita))
pendown()
for i in range(201):
if i*si+sita<p:
penup()
goto(x+a*cos(i*si)*cos(sita)-b*sin(i*si)*sin(sita)\
,y+a*cos(i*si)*sin(sita)+b*sin(i*si)*cos(sita))
pendown()
elif p<=i*si+sita<=q:
goto(x+a*cos(i*si)*cos(sita)-b*sin(i*si)*sin(sita)\
,y+a*cos(i*si)*sin(sita)+b*sin(i*si)*cos(sita))
#身体
fillcolor('#ffcc00')
begin_fill()
penup()
goto(200,0)
pendown()
left(90)
forward(230)
ty(0,230,0,200,140,0,pi)
left(180)
forward(230)
pensize(3)
left(90-atan(0.5)*180/pi)
forward(sqrt(30**2+60**2))
left(atan(0.5)*180/pi)
forward(280)
left(atan(0.5)*180/pi)
forward(sqrt(30**2+60**2))
right(atan(0.5)*180/pi)
right(90)
penup()
goto(-200,8)
pendown()
pensize(2)
forward(148)
ty(-90,-140,0,110,130,pi,3*pi/2)
left(90)
forward(180)
ty(90,-140,0,110,130,3*pi/2,2*pi)
left(90)
forward(148)
left(180)
end_fill()
fillcolor('#3366ff')
penup()
pensize(5)
ty_c(-90,-140,0,110,130,pi,3*pi/2,'#3366ff')
penup()
goto(90,-140)
pendown()
ty_c(90,-140,0,110,130,3*pi/2,2*pi,'#3366ff')
penup()
goto(-140,-25)
fillcolor('#3366ff')
begin_fill()
left(3)
pendown()
forward(110)
right(93)
forward(65)
left(180)
penup()
goto(-90,-270)
pendown()
forward(180)
penup()
goto(200,-150)
pendown()
right(180)
forward(65)
right(93)
forward(125)
left(93)
forward(280)
end_fill()
left(90)
penup()
goto(-200,-40)
pendown()
pensize(5)
fillcolor('#ffcc00')
begin_fill()
for i in range(10):
if 3<=i<5:
right(2)
forward(12)
elif i<3:
right(1)
forward(6)
elif 5<=i<=6:
left(1)
forward(12)
else:
left(2)
forward(4)
goto(-200,-140)
end_fill()
penup()
goto(200,-40)
pendown()
pensize(5)
fillcolor('#ffcc00')
begin_fill()
for i in range(10):
if 3<=i<5:
left(2)
forward(12)
elif i<3:
left(1)
forward(6)
elif 5<=i<=6:
right(1)
forward(12)
else:
right(2)
forward(4)
goto(200,-145)
end_fill()
#左背带
fillcolor('#0066cc')
penup()
goto(-200,6)
pendown()
pensize(5)
begin_fill()
for i in range(10):
if 3<=i<5:
right(1)
forward(3)
elif i<3:
right(2)
forward(1)
elif 5<=i<=6:
left(1)
forward(3)
else:
left(2)
forward(1)
goto(-200,-40)
pensize(3)
left(90-atan(0.5)*180/pi)
forward(100)
penup()
goto(-200,6)
end_fill()
begin_fill()
pendown()
forward(120)
right(90)
forward(42)
end_fill()
penup()
goto(-140,-50)
pendown()
fillcolor('#646464')
begin_fill()
ty(-125,-55,0,15,15,0,2.1*pi)
end_fill()
left(atan(0.5)*180/pi)
#右背带
fillcolor('#0066cc')
penup()
goto(200,6)
pendown()
pensize(5)
begin_fill()
for i in range(10):
if 3<=i<5:
left(1)
forward(3)
elif i<3:
left(2)
forward(1)
elif 5<=i<=6:
right(1)
forward(3)
else:
right(2)
forward(1)
goto(200,-40)
pensize(3)
right(90-atan(0.5)*180/pi)
forward(100)
penup()
goto(200,6)
end_fill()
begin_fill()
pendown()
forward(120)
left(90)
forward(42)
end_fill()
penup()
goto(140,-50)
pendown()
fillcolor('#646464')
begin_fill()
ty(125,-55,0,15,15,0,2.1*pi)
end_fill()
right(atan(0.5)*180/pi)
#肚兜
penup()
goto(0,-80)
pendown()
ty_c(-25,-80,0,35,100,pi+3*pi/100,3*pi/2,'#3399ff')
penup()
goto(25,-80)
pendown()
ty_c(25,-80,0,35,100,3*pi/2,2*pi,'#3399ff')
penup()
goto(-60,-85)
fillcolor('#3399ff')
begin_fill()
goto(-25,-180)
pendown()
left(90)
forward(50)
penup()
goto(60,-85)
pendown()
left(180)
forward(120)
end_fill()
left(90)
ty_c(0,-130,0,40,35,0,2*pi-pi/50,'#000000')
penup()
fillcolor('#3399ff')
begin_fill()
goto(0,-95)
pendown()
goto(-40,-130)
goto(0,-165)
goto(40,-130)
goto(0,-95)
end_fill()
ty_c(0,-130,0,15,10,0,2*pi-pi/50,'#000000')
penup()
fillcolor('#3399ff')
pencolor('#3399ff')
begin_fill()
goto(0,-130)
pendown()
goto(40,-130)
goto(40,-128)
goto(0,-130)
end_fill()
pencolor('#000000')
#镜框左
penup()
goto(-200,180)
right(180)
pendown()
pensize(8)
fillcolor('#808080')
begin_fill()
for i in range(10):
if 3<=i<5:
left(1)
forward(5)
elif i<3:
left(2)
forward(3)
elif 5<=i<=6:
right(1)
forward(5)
else:
right(2)
forward(3)
goto(-200,220)
goto(-180,225)
goto(-180,185)
goto(-200,180)
penup()
goto(-200,200)
pendown()
goto(-180,205)
end_fill()
penup()
goto(-180,205)
pendown()
pencolor('#808080')
pensize(10)
goto(-180,230)
goto(-180,180)
#镜框右
pencolor('#000000')
penup()
goto(200,180)
pendown()
pensize(8)
fillcolor('#808080')
begin_fill()
for i in range(10):
if 3<=i<5:
right(1)
forward(5)
elif i<3:
right(2)
forward(3)
elif 5<=i<=6:
left(1)
forward(5)
else:
left(2)
forward(3)
goto(200,220)
goto(180,225)
goto(180,185)
goto(200,180)
penup()
goto(200,200)
pendown()
goto(180,205)
end_fill()
penup()
goto(180,205)
pendown()
pencolor('#808080')
pensize(10)
goto(180,230)
goto(180,180)
#眼镜
pencolor('#000000')
pensize(3)
penup()
fillcolor('#c0c0c0')
pensize(5)
goto(90,210)
pendown()
begin_fill()
ty(90,210,0,91,91,0,2*pi+pi/25)
end_fill()
penup()
goto(-90,210)
pendown()
begin_fill()
ty(-90,210,0,91,91,0,2*pi+pi/25)
end_fill()
pensize(3)
penup()
goto(-90,210)
pendown()
ty_c(-90,210,0,70,70,0,2*pi,'#ffcc00')
penup()
goto(90,210)
pendown()
ty_c(90,210,0,70,70,0,2*pi,'#ffcc00')
penup()
goto(-90,210)
pendown()
ty_c(-90,207,0,70,62,0,2*pi,'#ffffff')
penup()
goto(90,210)
pendown()
ty_c(90,209,0,70,62,0,2*pi,'#ffffff')
#左眼睛
pensize(2)
a1=randint(-80,-70)
b1=randint(190,200)
c11=randint(1,5)
d=randint(8,12)
if c11==1:
c12='#ff6600'
elif c11==2:
c12='#33cccc'
elif c11==3:
c12='#ffff99'
elif c11==4:
c12='#99cc00'
else :
c12='#ff99cc'
penup()
goto(a1,b1)
pendown()
ty_c(a1,b1,0,22,22,0,2*pi,c12)
penup()
goto(a1,b1)
pendown()
ty_c(a1,b1,0,10,10,0,2*pi,'#000000')
penup()
goto(a1-d,b1+d)
pendown()
ty_c(a1-d,b1+d,0,5,5,0,2*pi,'#ffffff')
#右眼睛
a2=randint(70,80)
b2=randint(190,200)
c21=randint(1,5)
if c21==1:
c22='#ff6600'
elif c21==2:
c22='#33cccc'
elif c21==3:
c22='#ffff99'
elif c21==4:
c22='#99cc00'
else :
c22='#ff99cc'
penup()
goto(a2,b2)
pendown()
ty_c(a2,b2,0,22,22,0,2*pi,c22)
penup()
goto(a2,b2)
pendown()
ty_c(a2,b2,0,10,10,0,2*pi,'#000000')
penup()
goto(a2-d,b2+d)
pendown()
ty_c(a2-d,b2+d,0,5,5,0,2*pi,'#ffffff')
#嘴巴
e=randint(0,1)
if e==0:
pensize(4)
ty(0,120,0,130,80,3*pi/2-pi/5,3*pi/2+pi/5)
else:
pensize(5)
fillcolor('#ff8080')
penup()
goto(50,90)
begin_fill()
pendown()
seth(180)
circle(-150,3)
circle(-400,5)
circle(-800,5)
circle(-200,5)
seth(-90)
circle(150,3)
circle(360,2)
circle(400,3)
circle(250,4)
circle(70,80)
circle(100,5)
circle(150,3)
circle(50,20)
circle(30,45)
forward(25)
circle(180,13)
goto(50,90)
end_fill()
penup()
goto(40,20)
pensize(3)
pendown()
fillcolor('#993300')
begin_fill()
seth(120)
circle(140,50)
seth(-90)
circle(70,80)
circle(100,5)
circle(150,3)
goto(40,20)
end_fill()
#左手
seth(-90)
pensize(2)
penup()
goto(-200,-70)
fillcolor('#ffcc00')
begin_fill()
pendown()
right(60)
forward(120)
right(90)
forward(30)
goto(-200,-40)
end_fill()
seth(-90)
penup()
goto(-200,-70)
pendown()
fillcolor('#808080')
right(60)
forward(117)
begin_fill()
left(90)
forward(8)
right(30)
circle(-200,2)
circle(-1,70)
forward(40)
circle(-250,1)
circle(-25,180)
forward(20)
left(20)
forward(10)
circle(10)
right(10)
forward(15)
right(90)
forward(40)
end_fill()
#右手
seth(-90)
pensize(2)
penup()
goto(200,-70)
fillcolor('#ffcc00')
begin_fill()
pendown()
left(60)
forward(120)
left(90)
forward(30)
goto(200,-40)
end_fill()
seth(-90)
penup()
goto(200,-70)
pendown()
fillcolor('#808080')
left(60)
forward(117)
begin_fill()
right(90)
forward(8)
left(30)
circle(200,2)
circle(1,70)
forward(40)
circle(250,1)
circle(25,180)
forward(20)
right(20)
forward(10)
circle(-10)
left(10)
forward(15)
left(90)
forward(40)
end_fill()
seth(-90)
#左腿
penup()
goto(-90,-270)
pendown()
fillcolor('#3366ff')
begin_fill()
left(4)
forward(40)
seth(0)
forward(60)
goto(-28,-270)
end_fill()
seth(-90)
penup()
goto(-30,-270)
pendown()
fillcolor('#333333')
begin_fill()
left(4)
forward(40)
right(120)
circle(80,10)
circle(50,15)
forward(50)
circle(24,190)
circle(40,5)
circle(-39,6)
forward(35)
circle(-150,10)
goto(-30,-310)
end_fill()
#右腿
seth(-90)
penup()
goto(90,-270)
pendown()
fillcolor('#3366ff')
begin_fill()
right(3)
forward(40)
seth(180)
forward(60)
goto(28,-270)
end_fill()
seth(-90)
penup()
goto(30,-270)
pendown()
fillcolor('#333333')
begin_fill()
right(3)
forward(40)
left(120)
circle(-80,10)
circle(-50,15)
forward(50)
circle(-24,190)
circle(-40,5)
circle(39,6)
forward(35)
circle(150,10)
goto(30,-310)
end_fill()
seth(90)
#头发
pensize(2)
right(90)
penup()
goto(2,370)
pendown()
for i in range(10):
if 3<=i<5:
left(1)
forward(15)
elif i<3:
left(4)
forward(19)
elif 5<=i<=6:
right(15)
forward(15)
else:
right(6)
forward(20)
seth(0)
penup()
goto(8,370)
pendown()
for i in range(10):
if 3<=i<5:
left(2)
forward(8)
elif i<3:
left(3)
forward(10)
elif 5<=i<=6:
right(15)
forward(12)
else:
right(6)
forward(16)
seth(0)
penup()
goto(14,370)
pendown()
for i in range(10):
if 3<=i<5:
left(1)
forward(10)
elif i<3:
left(5)
forward(12)
elif 5<=i<=6:
right(15)
forward(18)
else:
right(6)
forward(20)
seth(0)
penup()
goto(20,370)
pendown()
for i in range(10):
if 3<=i<5:
left(1)
forward(11)
elif i<3:
left(3)
forward(3)
elif 5<=i<=6:
right(15)
forward(15)
else:
right(6)
forward(14)
seth(0)
penup()
goto(23,370)
pendown()
for i in range(10):
if 3<=i<5:
left(1)
forward(15)
elif i<3:
left(3)
forward(13)
elif 5<=i<=6:
right(15)
forward(18)
else:
right(8)
forward(16)
seth(0)
seth(180)
penup()
goto(-2,370)
pendown()
for i in range(10):
if 3<=i<5:
right(1)
forward(15)
elif i<3:
right(4)
forward(15)
elif 5<=i<=6:
left(15)
forward(15)
else:
left(6)
forward(20)
seth(180)
penup()
goto(-8,370)
pendown()
for i in range(10):
if 3<=i<5:
right(2)
forward(8)
elif i<3:
right(3)
forward(10)
elif 5<=i<=6:
left(15)
forward(12)
else:
left(6)
forward(14)
seth(180)
penup()
goto(-14,370)
pendown()
for i in range(10):
if 3<=i<5:
right(1)
forward(10)
elif i<3:
right(5)
forward(8)
elif 5<=i<=6:
left(15)
forward(18)
else:
left(6)
forward(20)
seth(180)
penup()
goto(-20,370)
pendown()
for i in range(10):
if 3<=i<5:
right(1)
forward(13)
elif i<3:
right(3)
forward(5)
elif 5<=i<=6:
left(15)
forward(6)
else:
left(6)
forward(16)
seth(180)
penup()
goto(-23,370)
pendown()
for i in range(10):
if 3<=i<5:
right(1)
forward(13)
elif i<3:
right(3)
forward(15)
elif 5<=i<=6:
left(15)
forward(8)
else:
left(8)
forward(16)
seth(180)
done()
效果如下:
本文含有隐藏内容,请 开通VIP 后查看