用matplotlib生成一个炫酷的爱心

#创意Python爱心代码分享#

在这里插入图片描述
下面是结合数学方程和可视化技巧,生成一个炫酷的爱心效果:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# 创建画布
fig = plt.figure(figsize=(8, 8))
ax = plt.axes(xlim=(-2.5, 2.5), ylim=(-3, 2))
ax.set_facecolor('black')  # 设置黑色背景
plt.axis('off')
# 爱心参数方程(改进版)
def heart(t):
    t = np.radians(t)
    x = 1.5 * (16 * np.sin(t)**3)
    y = 1.5 * (13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t))
    return x/20, y/20  # 缩放尺寸
# 生成角度数组
theta = np.linspace(0, 360, 1000)
# 初始化散点
scat = ax.scatter([], [], c=[], cmap='rainbow', s=40, alpha=0.7, edgecolors='w')
# 创建动画函数
def animate(angle):
    # 生成旋转矩阵
    rad = np.radians(angle)
    rot_matrix = np.array([[np.cos(rad), -np.sin(rad)],
                           [np.sin(rad), np.cos(rad)]])
    
    # 生成基础爱心坐标
    x, y = heart(theta)
    points = np.vstack((x, y))
    
    # 应用旋转
    rotated = np.dot(rot_matrix, points)
    
    # 颜色渐变参数(随时间变化)
    colors = np.sin(0.1*theta + np.radians(angle)*2)
    
    # 更新散点属性
    scat.set_offsets(rotated.T)
    scat.set_array(colors)
    scat.set_sizes(np.linspace(30, 60, len(theta)))  # 大小渐变
    
    # 添加随机星星特效
    stars_x = np.random.uniform(-2.5, 2.5, 30)
    stars_y = np.random.uniform(-3, 2, 30)
    sizes = np.random.uniform(10, 100, 30)
    plt.scatter(stars_x, stars_y, s=sizes, c='white', alpha=0.3, edgecolors='none')
    
    return scat,
# 创建动画
ani = FuncAnimation(fig, animate, frames=np.arange(0, 360, 2), interval=50)
# 添加标题
plt.title('Creative Rotating Heart', color='white', fontsize=16, y=0.9)
# 显示动画
plt.show()

代码解析:

  1. 数学方程:使用改进的心形参数方程,通过组合多个余弦项创建更柔和的爱心形状

  2. 动态效果

  • 实时旋转:使用旋转矩阵实现平滑旋转

  • 颜色渐变:彩虹色系映射结合角度参数

  • 大小渐变:点的大小从30到60渐变

  1. 视觉效果增强
  • 黑色背景与白色边框点

  • 半透明效果(alpha=0.7)

  • 随机星星特效(每次刷新随机生成)

  1. 参数调整技巧
  • 缩放系数(1.5倍原始方程)

  • 角度采样密度(1000个点)

  • 旋转速度(每帧2度)

进阶改进建议:

  1. 添加3D效果:
from mpl_toolkits.mplot3d import Axes3D
ax = fig.add_subplot(111, projection='3d')
# 在z轴添加波动:z = 0.5 * np.sin(2*t)

  1. 自定义颜色映射:
colors = np.linspace(0, 1, len(theta))
cmap = plt.cm.get_cmap('hsv', 256)

  1. 添加交互功能:
def onclick(event):
    # 点击生成文字特效
    plt.text(event.xdata, event.ydata, '❤', color='red', fontsize=20)
fig.canvas.mpl_connect('button_press_event', onclick)

这个动画会生成一个持续旋转的渐变爱心,背景带有随机闪烁的星星特效。颜色会随着旋转角度动态变化,每个点的大小也呈现渐变效果,整体呈现出梦幻般的视觉效果。可以通过调整colormap(‘rainbow’)、旋转速度(interval参数)和缩放系数来创建不同风格的爱心效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌叁儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值