一箭穿心~❤

这段代码使用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()
相关推荐
不如语冰15 分钟前
AI大模型入门-pytorch-张量2 tensor创建
python
NPE~27 分钟前
[AI]Agent开发——ADK框架使用
人工智能·python·ai·教程·adk·agent开发
矮个史蒂芬28 分钟前
统计verilog .v文件中output 的bit数
python
gwf2161 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
爱吃提升1 小时前
python 分布式爬虫、爬虫合规与综合实战项目
分布式·爬虫·python
审小匠OpenCPAi1 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
元Y亨H2 小时前
Pandas 解析 Excel 导致的内存溢出(MemoryError)
python·excel
金銀銅鐵3 小时前
[Python] 用 turtle 来绘制瑞典国旗
python
Albert Edison3 小时前
【GUI 自动化测试】Pywinauto 常见操作
自动化测试·python·pywinauto
海兰3 小时前
【高速缓存】RedisVL为文本生成嵌入向量实践指南
人工智能·python·机器学习