Hello Kitty作为深受大家喜爱的卡通形象,其可爱的外观和独特的魅力吸引了无数粉丝。今天,我将带领大家使用Python编程语言和Turtle库,一步步绘制出Hello Kitty的形象。
如果你想添加一个个性签名如下图,可以下拉到最后获取源码。
一、准备工作
首先,确保你的电脑已安装Python环境。接下来,导入所需的库:math和turtle。math库用于计算,turtle库用于绘图。
import math
import turtle
二、绘制步骤
1. 爱心
我们首先绘制Hello Kitty的标志性爱心。通过设置笔宽、颜色和位置,使用circle()和forward()函数绘制爱心。
def heart():
t.pensize(9)
t.setheading(90)
t.penup()
t.color("deeppink")
t.goto(-125, -135)
t.pendown()
t.begin_fill()
t.fillcolor('deeppink')
t.circle(9, 211)
t.fd(9 * 2.4)
t.lt(90)
t.fd(9 * 2.4)
t.circle(9, 211)
t.end_fill()
2. 头部
接着,我们绘制Hello Kitty的头部。使用setheading()函数设置初始方向,通过循环和forward()函数绘制头部曲线。
def head():
t.pensize(8)
t.pencolor("black")
t.penup()
t.goto(-130, 170)
t.pendown()
t.setheading(220)
for x in range(580):
t.forward(1)
if x < 250:
t.left(0.5)
elif x < 350:
t.left(0.1)
else:
t.left(0.5)
3. 耳朵
耳朵部分同样使用循环和forward()函数,结合left()函数调整方向,绘制出左右耳朵。
def ears():
t.setheading(70)
for i in range(150):
t.forward(1)
if i < 80:
t.left(0.2)
elif i < 90:
t.left(10)
else:
t.left(0.2)
t.setheading(160)
for i in range(140):
t.forward(1)
t.left(0.15)
t.setheading(140)
for i in range(157):
t.forward(1)
if i < 65:
t.left(0.2)
elif i < 75:
t.left(8)
else:
t.left(0.5)
4. 眼睛
眼睛部分分为左右眼,使用begin_fill()和end_fill()函数填充颜色,通过循环和forward()函数绘制眼珠。
def eyes():
# 左眼
t.pensize(5)
t.penup()
t.goto(-100, 60)
t.setheading(350)
t.pendown()
t.fillcolor("black")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 右眼
t.penup()
t.goto(50, 40)
t.setheading(350)
t.pendown()
t.fillcolor("black")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
5. 鼻子
鼻子部分使用fillcolor()设置颜色,通过循环和forward()函数绘制出鼻子形状。
def nose():
t.penup()
t.goto(-40, 30)
t.setheading(260)
t.pendown()
t.fillcolor("#ebc80e")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
6. 小花
小花部分是一个递归函数,通过循环和left()函数绘制出花朵形状。
def flower(n):
for i in range(n):
t.forward(0.5)
if i < 80:
t.left(1)
elif i < 120:
t.left(2.3)
else:
t.left(1)
7. 花朵
在Hello Kitty的头部绘制一朵大花,使用fillcolor()设置颜色,通过循环和left()函数绘制出花朵。
def flowers():
t.penup()
t.goto(20, 180)
t.pendown()
t.fillcolor("#dd4a76")
t.begin_fill()
t.setheading(175)
flower(200)
t.setheading(250)
flower(200)
t.setheading(325)
flower(200)
t.setheading(40)
flower(200)
t.setheading(115)
flower(170)
t.end_fill()
t.penup()
t.goto(30, 180)
t.setheading(270)
t.pendown()
t.fillcolor("#e7be04")
t.begin_fill()
t.circle(10)
t.end_fill()
8. 胡须
胡须部分分为左右两边,使用pensize()设置笔宽,通过循环和forward()函数绘制出胡须。
def beard():
t.penup()
t.goto(-150, 65)
t.pendown()
t.setheading(170)
t.pensize(6)
for y in range(40):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(-150, 85)
t.pendown()
t.setheading(160)
for y in range(50):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(-150, 45)
t.pendown()
t.setheading(180)
for y in range(55):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(110, 10)
t.setheading(340)
t.pendown()
for y in range(40):
t.forward(1)
t.right(0.3)
t.penup()
t.goto(120, 30)
t.setheading(350)
t.pendown()
for y in range(30):
t.forward(1)
t.right(0.3)
t.penup()
t.goto(115, 50)
t.setheading(360)
t.pendown()
for y in range(50):
t.forward(1)
t.right(0.3)
def myarc(t, r, angle):
length = 2 * math.pi * r * angle / 360 # angle角度的扇形的弧长
n = int(length / 3) + 1 # 线段条数
step_length = length / n # 每条线段的长度
step_angle = angle / n # 每条线段的角度
polyline(t, n, step_length, step_angle)
def polyline(t, n, length, angle):
for index in range(n):
t.fd(length)
t.lt(angle)
9. 身体(包括左右胳膊和手,左右脚)
身体部分使用fillcolor()设置颜色,通过循环和forward()函数绘制出身体形状。分别绘制左右胳膊和手,使用fillcolor()设置颜色,通过循环和forward()函数绘制出形状。最后,绘制左右脚,使用fillcolor()设置颜色,通过循环和forward()函数绘制出脚部形状。
def body():
t.pensize(8)
t.penup()
t.goto(-100, -30)
t.setheading(230)
t.pendown()
t.fillcolor("#efa9c1")
t.begin_fill()
for z in range(140):
t.forward(1)
t.left(0.2)
t.setheading(340)
for z in range(200):
t.forward(1)
t.left(0.1)
t.setheading(85)
for z in range(140):
t.forward(1)
t.left(0.1)
t.end_fill()
t.penup()
t.goto(-73, -33)
t.pendown()
t.setheading(250)
t.fillcolor("#da4b76")
t.begin_fill()
myarc(t, 40, 205)
t.setheading(170)
t.pensize(6)
t.forward(75)
t.end_fill()
# 左胳膊
t.pensize(8)
t.penup()
t.goto(-120, -17)
t.setheading(230)
t.pendown()
t.fillcolor("#d64b75")
t.begin_fill()
t.forward(50)
t.setheading(320)
for k in range(27):
t.forward(1)
t.left(1)
t.setheading(55)
for k in range(50):
t.forward(1)
t.right(0.1)
t.end_fill()
# 左手
t.penup()
t.goto(-125, -15)
t.setheading(140)
t.pendown()
t.fillcolor("pink")
t.begin_fill()
t.forward(8)
t.setheading(50)
myarc(t, 10, 190)
t.setheading(150)
for j in range(80):
t.forward(1)
t.left(2.2)
t.forward(24)
t.end_fill()
# 右胳膊
t.penup()
t.goto(27, -45)
t.pendown()
t.fillcolor("#db4e79")
t.setheading(350)
t.begin_fill()
for x in range(50):
t.forward(1)
t.right(1)
t.setheading(220)
t.forward(40)
t.setheading(100)
for x in range(50):
t.forward(1)
t.left(0.2)
t.end_fill()
# 右手
t.penup()
t.goto(70, -75)
t.pendown()
t.setheading(300)
t.forward(8)
t.setheading(30)
for x in range(40):
t.forward(1)
t.right(5)
t.setheading(280)
for x in range(70):
t.forward(1)
t.right(2)
# 右脚
t.penup()
t.goto(-70, -180)
t.pendown()
t.setheading(250)
for x in range(30):
t.forward(1)
t.left(0.3)
for x in range(160):
t.forward(1)
if x < 30:
t.left(3)
elif x < 65:
t.left(0.1)
else:
t.left(1)
# 左脚
t.penup()
t.goto(-150, -210)
t.setheading(340)
t.pendown()
t.fillcolor("pink")
t.begin_fill()
step = 1.5
for i in range(2):
for j in range(60):
if j < 30:
step += 0.1
else:
step -= 0.1
t.forward(step)
t.left(3)
t.end_fill()
三、运行程序
完整代码:
import math
import turtle
# 爱心
def heart():
t.pensize(9)
t.setheading(90)
t.penup()
t.color("deeppink")
t.goto(-125, -135)
t.pendown()
t.begin_fill()
t.fillcolor('deeppink')
t.circle(9, 211)
t.fd(9 * 2.4)
t.lt(90)
t.fd(9 * 2.4)
t.circle(9, 211)
t.end_fill()
# 头
def head():
t.pensize(8)
t.pencolor("black")
t.penup()
t.goto(-130, 170)
t.pendown()
t.setheading(220)
for x in range(580):
t.forward(1)
if x < 250:
t.left(0.5)
elif x < 350:
t.left(0.1)
else:
t.left(0.5)
# 耳朵
def ears():
t.setheading(70)
for i in range(150):
t.forward(1)
if i < 80:
t.left(0.2)
elif i < 90:
t.left(10)
else:
t.left(0.2)
t.setheading(160)
for i in range(140):
t.forward(1)
t.left(0.15)
t.setheading(140)
for i in range(157):
t.forward(1)
if i < 65:
t.left(0.2)
elif i < 75:
t.left(8)
else:
t.left(0.5)
# 眼睛
def eyes():
# 左眼
t.pensize(5)
t.penup()
t.goto(-100, 60)
t.setheading(350)
t.pendown()
t.fillcolor("black")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 右眼
t.penup()
t.goto(50, 40)
t.setheading(350)
t.pendown()
t.fillcolor("black")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 鼻子
def nose():
t.penup()
t.goto(-40, 30)
t.setheading(260)
t.pendown()
t.fillcolor("#ebc80e")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 小花
def flower(n):
for i in range(n):
t.forward(0.5)
if i < 80:
t.left(1)
elif i < 120:
t.left(2.3)
else:
t.left(1)
# 花朵
def flowers():
t.penup()
t.goto(20, 180)
t.pendown()
t.fillcolor("#dd4a76")
t.begin_fill()
t.setheading(175)
flower(200)
t.setheading(250)
flower(200)
t.setheading(325)
flower(200)
t.setheading(40)
flower(200)
t.setheading(115)
flower(170)
t.end_fill()
t.penup()
t.goto(30, 180)
t.setheading(270)
t.pendown()
t.fillcolor("#e7be04")
t.begin_fill()
t.circle(10)
t.end_fill()
# 胡须
def beard():
t.penup()
t.goto(-150, 65)
t.pendown()
t.setheading(170)
t.pensize(6)
for y in range(40):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(-150, 85)
t.pendown()
t.setheading(160)
for y in range(50):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(-150, 45)
t.pendown()
t.setheading(180)
for y in range(55):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(110, 10)
t.setheading(340)
t.pendown()
for y in range(40):
t.forward(1)
t.right(0.3)
t.penup()
t.goto(120, 30)
t.setheading(350)
t.pendown()
for y in range(30):
t.forward(1)
t.right(0.3)
t.penup()
t.goto(115, 50)
t.setheading(360)
t.pendown()
for y in range(50):
t.forward(1)
t.right(0.3)
def myarc(t, r, angle):
length = 2 * math.pi * r * angle / 360 # angle角度的扇形的弧长
n = int(length / 3) + 1 # 线段条数
step_length = length / n # 每条线段的长度
step_angle = angle / n # 每条线段的角度
polyline(t, n, step_length, step_angle)
def polyline(t, n, length, angle):
for index in range(n):
t.fd(length)
t.lt(angle)
# 身体
def body():
t.pensize(8)
t.penup()
t.goto(-100, -30)
t.setheading(230)
t.pendown()
t.fillcolor("#efa9c1")
t.begin_fill()
for z in range(140):
t.forward(1)
t.left(0.2)
t.setheading(340)
for z in range(200):
t.forward(1)
t.left(0.1)
t.setheading(85)
for z in range(140):
t.forward(1)
t.left(0.1)
t.end_fill()
t.penup()
t.goto(-73, -33)
t.pendown()
t.setheading(250)
t.fillcolor("#da4b76")
t.begin_fill()
myarc(t, 40, 205)
t.setheading(170)
t.pensize(6)
t.forward(75)
t.end_fill()
# 左胳膊
t.pensize(8)
t.penup()
t.goto(-120, -17)
t.setheading(230)
t.pendown()
t.fillcolor("#d64b75")
t.begin_fill()
t.forward(50)
t.setheading(320)
for k in range(27):
t.forward(1)
t.left(1)
t.setheading(55)
for k in range(50):
t.forward(1)
t.right(0.1)
t.end_fill()
# 左手
t.penup()
t.goto(-125, -15)
t.setheading(140)
t.pendown()
t.fillcolor("pink")
t.begin_fill()
t.forward(8)
t.setheading(50)
myarc(t, 10, 190)
t.setheading(150)
for j in range(80):
t.forward(1)
t.left(2.2)
t.forward(24)
t.end_fill()
# 右胳膊
t.penup()
t.goto(27, -45)
t.pendown()
t.fillcolor("#db4e79")
t.setheading(350)
t.begin_fill()
for x in range(50):
t.forward(1)
t.right(1)
t.setheading(220)
t.forward(40)
t.setheading(100)
for x in range(50):
t.forward(1)
t.left(0.2)
t.end_fill()
# 右手
t.penup()
t.goto(70, -75)
t.pendown()
t.setheading(300)
t.forward(8)
t.setheading(30)
for x in range(40):
t.forward(1)
t.right(5)
t.setheading(280)
for x in range(70):
t.forward(1)
t.right(2)
# 右脚
t.penup()
t.goto(-70, -180)
t.pendown()
t.setheading(250)
for x in range(30):
t.forward(1)
t.left(0.3)
for x in range(160):
t.forward(1)
if x < 30:
t.left(3)
elif x < 65:
t.left(0.1)
else:
t.left(1)
# 左脚
t.penup()
t.goto(-150, -210)
t.setheading(340)
t.pendown()
t.fillcolor("pink")
t.begin_fill()
step = 1.5
for i in range(2):
for j in range(60):
if j < 30:
step += 0.1
else:
step -= 0.1
t.forward(step)
t.left(3)
t.end_fill()
# 主函数
turtle.setup(1.0, 1.0)
turtle.title("hellokitty!")
turtle.bgcolor("pink")
t = turtle.Turtle()
t.hideturtle()
t.screen.delay(0)
head()
ears()
eyes()
nose()
beard()
flowers()
body()
heart()
turtle.mainloop()
添加个性签名后的代码如下:
import math
import turtle
# 爱心
def heart():
t.pensize(9)
t.setheading(90)
t.penup()
t.color("deeppink")
t.goto(-125, -135)
t.pendown()
t.begin_fill()
t.fillcolor('deeppink')
t.circle(9, 211)
t.fd(9 * 2.4)
t.lt(90)
t.fd(9 * 2.4)
t.circle(9, 211)
t.end_fill()
# 头
def head():
t.pensize(8)
t.pencolor("black")
t.penup()
t.goto(-130, 170)
t.pendown()
t.setheading(220)
for x in range(580):
t.forward(1)
if x < 250:
t.left(0.5)
elif x < 350:
t.left(0.1)
else:
t.left(0.5)
# 耳朵
def ears():
t.setheading(70)
for i in range(150):
t.forward(1)
if i < 80:
t.left(0.2)
elif i < 90:
t.left(10)
else:
t.left(0.2)
t.setheading(160)
for i in range(140):
t.forward(1)
t.left(0.15)
t.setheading(140)
for i in range(157):
t.forward(1)
if i < 65:
t.left(0.2)
elif i < 75:
t.left(8)
else:
t.left(0.5)
# 眼睛
def eyes():
# 左眼
t.pensize(5)
t.penup()
t.goto(-100, 60)
t.setheading(350)
t.pendown()
t.fillcolor("black")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 右眼
t.penup()
t.goto(50, 40)
t.setheading(350)
t.pendown()
t.fillcolor("black")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 鼻子
def nose():
t.penup()
t.goto(-40, 30)
t.setheading(260)
t.pendown()
t.fillcolor("#ebc80e")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 小花
def flower(n):
for i in range(n):
t.forward(0.5)
if i < 80:
t.left(1)
elif i < 120:
t.left(2.3)
else:
t.left(1)
# 花朵
def flowers():
t.penup()
t.goto(20, 180)
t.pendown()
t.fillcolor("#dd4a76")
t.begin_fill()
t.setheading(175)
flower(200)
t.setheading(250)
flower(200)
t.setheading(325)
flower(200)
t.setheading(40)
flower(200)
t.setheading(115)
flower(170)
t.end_fill()
t.penup()
t.goto(30, 180)
t.setheading(270)
t.pendown()
t.fillcolor("#e7be04")
t.begin_fill()
t.circle(10)
t.end_fill()
# 胡须
def beard():
t.penup()
t.goto(-150, 65)
t.pendown()
t.setheading(170)
t.pensize(6)
for y in range(40):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(-150, 85)
t.pendown()
t.setheading(160)
for y in range(50):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(-150, 45)
t.pendown()
t.setheading(180)
for y in range(55):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(110, 10)
t.setheading(340)
t.pendown()
for y in range(40):
t.forward(1)
t.right(0.3)
t.penup()
t.goto(120, 30)
t.setheading(350)
t.pendown()
for y in range(30):
t.forward(1)
t.right(0.3)
t.penup()
t.goto(115, 50)
t.setheading(360)
t.pendown()
for y in range(50):
t.forward(1)
t.right(0.3)
def myarc(t, r, angle):
length = 2 * math.pi * r * angle / 360 # angle角度的扇形的弧长
n = int(length / 3) + 1 # 线段条数
step_length = length / n # 每条线段的长度
step_angle = angle / n # 每条线段的角度
polyline(t, n, step_length, step_angle)
def polyline(t, n, length, angle):
for index in range(n):
t.fd(length)
t.lt(angle)
# 身体
def body():
t.pensize(8)
t.penup()
t.goto(-100, -30)
t.setheading(230)
t.pendown()
t.fillcolor("#efa9c1")
t.begin_fill()
for z in range(140):
t.forward(1)
t.left(0.2)
t.setheading(340)
for z in range(200):
t.forward(1)
t.left(0.1)
t.setheading(85)
for z in range(140):
t.forward(1)
t.left(0.1)
t.end_fill()
t.penup()
t.goto(-73, -33)
t.pendown()
t.setheading(250)
t.fillcolor("#da4b76")
t.begin_fill()
myarc(t, 40, 205)
t.setheading(170)
t.pensize(6)
t.forward(75)
t.end_fill()
# 左胳膊
t.pensize(8)
t.penup()
t.goto(-120, -17)
t.setheading(230)
t.pendown()
t.fillcolor("#d64b75")
t.begin_fill()
t.forward(50)
t.setheading(320)
for k in range(27):
t.forward(1)
t.left(1)
t.setheading(55)
for k in range(50):
t.forward(1)
t.right(0.1)
t.end_fill()
# 左手
t.penup()
t.goto(-125, -15)
t.setheading(140)
t.pendown()
t.fillcolor("pink")
t.begin_fill()
t.forward(8)
t.setheading(50)
myarc(t, 10, 190)
t.setheading(150)
for j in range(80):
t.forward(1)
t.left(2.2)
t.forward(24)
t.end_fill()
# 右胳膊
t.penup()
t.goto(27, -45)
t.pendown()
t.fillcolor("#db4e79")
t.setheading(350)
t.begin_fill()
for x in range(50):
t.forward(1)
t.right(1)
t.setheading(220)
t.forward(40)
t.setheading(100)
for x in range(50):
t.forward(1)
t.left(0.2)
t.end_fill()
# 右手
t.penup()
t.goto(70, -75)
t.pendown()
t.setheading(300)
t.forward(8)
t.setheading(30)
for x in range(40):
t.forward(1)
t.right(5)
t.setheading(280)
for x in range(70):
t.forward(1)
t.right(2)
# 右脚
t.penup()
t.goto(-70, -180)
t.pendown()
t.setheading(250)
for x in range(30):
t.forward(1)
t.left(0.3)
for x in range(160):
t.forward(1)
if x < 30:
t.left(3)
elif x < 65:
t.left(0.1)
else:
t.left(1)
# 左脚
t.penup()
t.goto(-150, -210)
t.setheading(340)
t.pendown()
t.fillcolor("pink")
t.begin_fill()
step = 1.5
for i in range(2):
for j in range(60):
if j < 30:
step += 0.1
else:
step -= 0.1
t.forward(step)
t.left(3)
t.end_fill()
def display_text():
t.penup()
# 移动到画布右下角位置
t.goto(turtle.window_width() / 2 - 150, -turtle.window_height() / 2 + 20)
t.pendown()
t.color("black")
# 输出文本
t.write("Hello,李清照!", font=("Arial", 16, "normal"))
# 主函数
turtle.setup(800, 600)
turtle.title("hellokitty!")
turtle.bgcolor("pink")
t = turtle.Turtle()
t.hideturtle()
t.screen.delay(0)
head()
ears()
eyes()
nose()
beard()
flowers()
body()
heart()
display_text() # 调用函数显示文本
turtle.mainloop()
完成以上步骤后,使用turtle.mainloop()函数运行程序,即可看到Hello Kitty的形象。
结语:
通过本文,我们学会了使用Python的Turtle库绘制Hello Kitty。希望大家在动手实践的过程中,能体会到编程的乐趣。如果你对Python绘图感兴趣,不妨尝试绘制其他卡通形象,分享给你的朋友吧!