这段代码使用turtle库绘制了一个经典的 "一箭穿心" 图案,包含两颗爱心、一支穿心箭和署名文字签名,整体逻辑清晰,充满浪漫寓意。以下是详细分析:
1. 导入库
python
from turtle import * # 导入turtle库所有功能(用于绘图)
from time import sleep # 导入sleep函数(代码中未实际使用,可删除)
2. 核心函数解析
(1)go_to(x, y):移动画笔位置
python
def go_to(x, y):
up() # 抬起画笔(移动时不绘图)
goto(x, y) # 移动到坐标(x, y)
down() # 放下画笔(准备绘图)
- 作用:快速定位画笔到指定坐标,避免移动过程中留下多余线条。
(2)爱心绘制相关函数(核心)
这组函数通过组合直线和弧线,绘制出爱心形状:
big_Circle(size):绘制爱心外侧的大弧线
python
def big_Circle(size):
speed(1)
for i in range(150): # 循环150次,每次移动size距离并右转0.3°,形成大弧度曲线
forward(size)
right(0.3)
scss
right(0.3)
small_Circle(size):绘制爱心内侧的小弧线
python
def small_Circle(size):
speed(1)
for i in range(210): # 循环210次,每次移动size距离并右转0.786°,形成小弧度曲线
forward(size)
right(0.786)
line(size):绘制爱心中间的直线(连接两侧弧线)
python
def line(size):
speed(1)
forward(51 * size) # 直线长度为51倍的size
heart(x, y, size):组合上述元素,绘制完整爱心
python
def heart(x, y, size):
go_to(x, y) # 移动到爱心起点
left(150) # 左转150°,调整初始角度
begin_fill() # 开始填充颜色(粉色)
# 绘制右侧半颗心
line(size) # 画右侧直线
big_Circle(size) # 画右侧大弧线
small_Circle(size) # 画右侧小弧线
# 转向绘制左侧半颗心
left(120) # 左转120°,切换方向
small_Circle(size) # 画左侧小弧线
big_Circle(size) # 画左侧大弧线
line(size) # 画左侧直线(闭合爱心)
end_fill() # 结束填充
-
- 原理:通过对称的弧线和直线组合,形成心形,并用粉色填充。
(3)箭相关函数
arrow():绘制穿心箭的箭杆
python
def arrow():
pensize(10) # 箭杆较粗(10像素)
setheading(0) # 画笔朝向x轴正方向
go_to(-400, 0) # 移动到左侧起点
left(15) # 左转15°,使箭倾斜穿过爱心
forward(150) # 绘制左侧箭杆
go_to(339, 178) # 移动到右侧箭杆起点(穿过爱心的位置)
forward(150) # 绘制右侧箭杆
arrowHead():绘制箭头
python
def arrowHead():
pensize(1) # 箭头线条较细
speed(1)
color('red', 'red') # 箭头颜色为红色(线条+填充)
begin_fill()
# 绘制三角形箭头
left(120)
forward(20)
right(150)
forward(35)
right(120)
forward(35)
right(150)
forward(20)
end_fill()
(4)main():主函数(程序入口)
python
def main():
pensize(2) # 爱心线条粗细为2像素
color('red', 'pink') # 线条颜色红色,填充颜色粉色
# 绘制两颗爱心
heart(200, 0, 1) # 第一颗心(位置(200,0),大小1)
setheading(0) # 重置画笔方向为x轴正方向
heart(-80, -100, 1.5) # 第二颗心(位置(-80,-100),大小1.5,比第一颗大)
# 绘制箭
arrow() # 绘制箭杆
arrowHead() # 绘制箭头
# 添加文字签名
go_to(400, -300)
write("author:520Python", move=True, align="left", font=("宋体", 30, "normal"))
done() # 保持绘图窗口不关闭
main() # 执行主函数
3. 整体效果
运行代码后,会绘制出: 两颗粉色爱心(一大一小,位置不同) 一支红色箭头的箭,倾斜穿过两颗爱心 右下角文字 "author:520Python"
4. 特点与可优化点
特点:通过基础几何图形(直线、弧线)组合出复杂图案,逻辑对称,适合表达浪漫主题。
代码
python
from turtle import *
from time import sleep
def go_to(x, y):
up()
goto(x, y)
down()
def big_Circle(size): #函数用于绘制心的大圆
speed(1)
for i in range(150):
forward(size)
right(0.3)
def small_Circle(size): #函数用于绘制心的小圆
speed(1)
for i in range(210):
forward(size)
right(0.786)
def line(size):
speed(1)
forward(51*size)
def heart( x, y, size):
go_to(x, y)
left(150)
begin_fill()
line(size)
big_Circle(size)
small_Circle(size)
left(120)
small_Circle(size)
big_Circle(size)
line(size)
end_fill()
def arrow():
pensize(10)
setheading(0)
go_to(-400, 0)
left(15)
forward(150)
go_to(339, 178)
forward(150)
def arrowHead():
pensize(1)
speed(1)
color('red', 'red')
begin_fill()
left(120)
forward(20)
right(150)
forward(35)
right(120)
forward(35)
right(150)
forward(20)
end_fill()
def main():
pensize(2)
color('red', 'pink')
#getscreen().tracer(30, 0) #取消注释后,快速显示图案
heart(200, 0, 1) #画出第一颗心,前面两个参数控制心的位置,函数最后一个参数可控制心的大小
setheading(0) #使画笔的方向朝向x轴正方向
heart(-80, -100, 1.5) #画出第二颗心
arrow() #画出穿过两颗心的直线
arrowHead() #画出箭的箭头
go_to(400, -300)
write("author:520Python", move=True, align="left", font=("宋体", 30, "normal"))
done()
main()