当前位置: 首页 > news >正文

用matplotlib生成一个炫酷的爱心

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

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参数)和缩放系数来创建不同风格的爱心效果。

相关文章:

  • 【项目管理】第9章 项目范围管理
  • MySQL学习笔记二十
  • WebShell详解:原理、分类、攻击与防御
  • opengrok搭建与配置
  • 位掩码、哈希表、异或运算、杨辉三角、素数查找、前缀和
  • MySQL 中JSON_CONTAINS ,用于检查 JSON 文档是否包含特定的值
  • 开源AI大模型AI智能名片S2B2C商城小程序:科技浪潮下的商业新引擎
  • 头歌 | WPS文档基本操作
  • Zephyr、FreeRTOS、RT-Thread 低功耗模式对比分析
  • ZYNQ笔记(四):AXI GPIO
  • Java-JDBC入门程序、预编译SQL
  • 动手学习:路径规划原理及常用算法
  • HTTP协议原理深度解析:从基础到实践
  • FreeRTOS动态任务创建
  • 线代[13]|线性代数题37道以及数学分析题3道(多图预警)
  • 【无标题】spark编程
  • HTTP:二.URI及相关术语
  • Linux 调试代码工具:gdb
  • 九屏图分析法以手机为例
  • OPEX baota 2024.02.26
  • 数据库性质的网站怎么做/站长工具seo综合查询
  • 做淘宝店头的网站/常见的网络营销推广方式有哪些
  • 用手机制作网站的软件/代运营一般收费
  • my网站域名/app拉新推广平台
  • 一个微信网站多少钱/网页制作接单平台
  • 动易 如何在一个服务器测试两个网站/推广关键词外包