螺旋状的爱心,代表愈发深厚的❤

48 阅读2分钟

1. 导入库

from turtle import *       # 导入turtle库的所有函数(用于绘图)
from colorsys import *     # 导入colorsys库的所有函数(用于颜色转换)

2. 定义曲线函数 curve()

def curve():
    for i in range(200):
        right(1)    # 每次向右转1度
        forward(1)  # 每次向前移动1单位

3. 初始化绘图参数

tracer(10)       # 每10步刷新一次屏幕(加速绘图,减少闪烁)
delay(0)         # 绘图延迟设为0(最快速度)
speed(0)         # 画笔速度设为最快(0代表最快)
pensize(3)       # 画笔粗细为3像素
bgcolor("black") # 背景色设为黑色
left(140)        # 初始向左转140度(调整整体图形角度)

4. 主绘图逻辑

cycles_number = 2  # 控制绘制的“周期”数量(这里是2次)
for _ in range(cycles_number):
    s = 1  # 初始饱和度(用于颜色渐变)
    for i in range(36):  # 每个周期内绘制36个图形单元
        # 设置颜色:画笔颜色固定为#C90055(深粉色),填充色用HSV转RGB
        color("#C90055", hsv_to_rgb(0.92, s, 1))
        begin_fill()  # 开始填充图形
        
        # 绘制一个“花瓣状”基本单元
        forward(111.65)  # 向前移动固定距离
        curve()          # 绘制曲线
        left(120)        # 向左转120度
        curve()          # 绘制另一条曲线
        forward(111.65)  # 向前移动固定距离
        
        end_fill()       # 结束填充
        hideturtle()     # 隐藏画笔(避免显示笔尖)
        right(90)        # 向右转90度(准备绘制下一个单元)
        s -= 0.02        # 饱和度递减(使填充色逐渐变浅)
done()  # 保持绘图窗口

5. 核心逻辑解析

  • 颜色渐变:通过hsv_to_rgb(0.92, s, 1)生成填充色。其中:

    • H(色相)固定为 0.92(接近红色 / 粉色系);
    • S(饱和度)从 1 逐渐减到 0.34(36 次循环,每次减 0.02),颜色从鲜艳逐渐变浅;
    • V(明度)固定为 1(最亮)。
  • 图形结构:每个周期绘制 36 个 “花瓣单元”,每个单元由两条曲线和两条直线组成,绘制完成后旋转 90 度,形成螺旋扩散的效果。

  • 多层绘制cycles_number=2表示重复绘制 2 个周期,最终形成更复杂的叠加图形。

最终效果

运行后会生成一个以黑色为背景、由粉色系渐变填充的螺旋状图形,整体呈现对称且渐变的视觉效果。

6.代码示例:

from turtle import *
from colorsys import *


def curve():
    for i in range(200):
        right(1)
        forward(1)


tracer(10)
delay(0)
speed(0)
pensize(3)
bgcolor("black")

left(140)

cycles_number = 2
for _ in range(cycles_number):
    s = 1
    for i in range(36):
        color("#C90055", hsv_to_rgb(0.92, s, 1))
        begin_fill()
        forward(111.65)
        curve()
        left(120)
        curve()
        forward(111.65)
        end_fill()
        hideturtle()
        right(90)
        s -= 0.02
done()

7.效果:

image.png