一箭穿心~❤

这段代码使用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()
相关推荐
花开花富贵6 小时前
火柴人也可以示爱!💞
python
Hello.Reader6 小时前
Flink Processing Timer Service 用处理时间把“准点任务”写进流里
大数据·python·flink
Gitpchy6 小时前
Day 28 类的定义和方法
python·机器学习
jieyu11196 小时前
Python 实战:Web 漏洞 Python POC 代码及原理详解(3)
python·web安全
弗朗凌戈6 小时前
机器学习-导师优选
人工智能·python·机器学习
全栈探索者7 小时前
numpy基础
python·数据分析·numpy
程序员爱钓鱼7 小时前
Python编程实战 - 函数与模块化编程 - Python内置模块(math、os、sys、random等)
后端·python·ipython
Blossom.1188 小时前
把AI“灌”进奶瓶:1KB决策树让婴儿温奶器自己学会「恒温+计时」
人工智能·python·深度学习·算法·决策树·机器学习·计算机视觉
Jmayday9 小时前
python数据分析项目之:房地产数据可视化分析
python·信息可视化·数据分析