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

3D旋转动态爱心 - Python创意代码

3D旋转动态爱心 - Python创意代码

3D旋转动态爱心代码,使用Python的Matplotlib库实现。这个程序创建了一个具有复杂数学曲面和动态旋转效果的3D爱心,并添加了粒子轨迹、光效等视觉元素。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from skimage import measure  # 补充缺失的模块导入
import math
import time# 设置图形和3D坐标轴
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文显示问题
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
fig = plt.figure(figsize=(12, 10), facecolor='black')
ax = fig.add_subplot(111, projection='3d')
ax.set_facecolor('black')
ax.grid(False)  # 关闭网格
ax.set_axis_off()  # 关闭坐标轴# 设置视角
ax.view_init(elev=30, azim=45)# 爱心参数方程
def heart_3d(x, y, z):"""计算3D爱心方程的值"""return (x**2 + (9/4)*y**2 + z**2 - 1)**3 - x**2*z**3 - (9/80)*y**2*z**3# 创建数据网格
n = 100  # 网格分辨率
x = np.linspace(-1.8, 1.8, n)
y = np.linspace(-1.8, 1.8, n)
z = np.linspace(-1.8, 1.8, n)
X, Y, Z = np.meshgrid(x, y, z)# 计算爱心曲面
F = heart_3d(X, Y, Z)# 提取爱心表面(修正模块调用)
verts, faces, _, _ = measure.marching_cubes(F, 0, spacing=(0.1, 0.1, 0.1))# 调整顶点位置到正确范围
verts = verts - [n/2, n/2, n/2]
verts = verts / (n/3.6)# 创建爱心表面
heart = ax.plot_trisurf(verts[:, 0], verts[:, 1], faces, verts[:, 2], cmap='magma', alpha=0.9, edgecolor='none')# 添加粒子系统
num_particles = 200
particles = np.zeros((num_particles, 3))
particle_colors = np.random.rand(num_particles, 3)  # 随机颜色
particle_sizes = np.random.uniform(5, 50, num_particles)  # 随机大小# 初始化粒子位置在爱心内部
for i in range(num_particles):while True:pt = np.random.uniform(-1.2, 1.2, 3)if heart_3d(pt[0], pt[1], pt[2]) < 0:particles[i] = ptbreak# 绘制初始粒子
scatter = ax.scatter(particles[:, 0], particles[:, 1], particles[:, 2], s=particle_sizes, c=particle_colors, alpha=0.7)# 添加文字
title = ax.text2D(0.5, 0.95, "3D旋转动态爱心", transform=ax.transAxes,ha='center', color='#FF69B4', fontsize=24, fontweight='bold')
subtitle = ax.text2D(0.5, 0.90, "数学之美 · 编程之艺", transform=ax.transAxes,ha='center', color='white', fontsize=16)# 添加底部签名
signature = ax.text2D(0.5, 0.05, "Created with Python & Matplotlib", transform=ax.transAxes, ha='center', color='#FFD700', fontsize=14, fontstyle='italic')# 添加心形光效
def add_glow():for _ in range(20):r = np.random.uniform(1.5, 2.5)theta = np.random.uniform(0, 2*np.pi)phi = np.random.uniform(0, np.pi)x = r * np.sin(phi) * np.cos(theta)y = r * np.sin(phi) * np.sin(theta) * 0.8  # 压缩y轴z = r * np.cos(phi) * 0.5  # 压缩z轴size = np.random.uniform(30, 100)alpha = np.random.uniform(0.1, 0.3)color = np.random.choice(['#FF1493', '#FF69B4', '#FFB6C1', '#FFC0CB'])ax.scatter([x], [y], [z], s=size, c=color, alpha=alpha, edgecolors='none')add_glow()# 添加坐标轴装饰
ax.plot([-2, 2], [0, 0], [0, 0], color='#00FFFF', alpha=0.3, linewidth=1)
ax.plot([0, 0], [-2, 2], [0, 0], color='#00FFFF', alpha=0.3, linewidth=1)
ax.plot([0, 0], [0, 0], [-2, 2], color='#00FFFF', alpha=0.3, linewidth=1)# 添加边框装饰
for s in np.linspace(-2, 2, 8):ax.plot([s, s], [-2, -2], [-2, 2], color='#9400D3', alpha=0.2, linewidth=0.5)ax.plot([s, s], [2, 2], [-2, 2], color='#9400D3', alpha=0.2, linewidth=0.5)ax.plot([-2, 2], [s, s], [-2, -2], color='#9400D3', alpha=0.2, linewidth=0.5)ax.plot([-2, 2], [s, s], [2, 2], color='#9400D3', alpha=0.2, linewidth=0.5)# 动画更新函数(新增时间戳更新)
def update(frame):# 旋转爱心angle = frame * 0.5ax.view_init(elev=30, azim=angle)# 更新粒子位置particles += np.random.uniform(-0.05, 0.05, (num_particles, 3))# 向量化检查粒子是否在爱心内(优化性能)mask = heart_3d(particles[:,0], particles[:,1], particles[:,2]) > 0particles[mask] -= np.random.uniform(-0.03, 0.03, (mask.sum(), 3))# 更新散点图数据scatter._offsets3d = (particles[:, 0], particles[:, 1], particles[:, 2])# 动态改变粒子大小new_sizes = particle_sizes * (0.8 + 0.4 * np.sin(frame * 0.1))scatter.set_sizes(new_sizes)# 动态改变爱心颜色heart.set_array(np.sin(verts[:, 0] + frame * 0.1))# 更新标题颜色title.set_color(plt.cm.magma(0.5 + 0.3 * np.sin(frame * 0.05)))# 每100帧添加新光效if frame % 100 == 0:add_glow()# 更新时间戳(新增)timestamp.set_text(time.strftime('%Y-%m-%d %H:%M:%S'))return scatter, heart, title, timestamp# 创建动画(新增时间戳对象)
timestamp = ax.text2D(0.01, 0.01, time.strftime('%Y-%m-%d %H:%M:%S'), transform=ax.transAxes, color='#7CFC00', fontsize=10)ani = FuncAnimation(fig, update, frames=range(0, 360, 2), interval=40, blit=False)plt.tight_layout()
plt.show()

代码解读

这个3D旋转爱心程序结合了数学建模、计算机图形学和动画技术,以下是关键部分的详细解读:

1. 3D爱心数学模型

核心是使用隐式方程定义爱心曲面:

def heart_3d(x, y, z):return (x**2 + (9/4)*y**2 + z**2 - 1)**3 - x**2*z**3 - (9/80)*y**2*z**3

这个方程描述了一个3D爱心曲面,通过marching_cubes算法提取等值面生成网格。

2. 动态粒子系统

程序包含一个粒子系统,粒子在爱心内部随机运动:

# 初始化200个粒子
num_particles = 200
particles = np.zeros((num_particles, 3))# 更新粒子位置
for i in range(num_particles):particles[i] += np.random.uniform(-0.05, 0.05, 3)# 确保粒子在爱心内部while heart_3d(particles[i, 0], particles[i, 1], particles[i, 2]) > 0:particles[i] -= np.random.uniform(-0.03, 0.03, 3)

3. 视觉特效

  • 光效系统:在爱心周围随机生成半透明的彩色光点
  • 动态着色:爱心表面使用magma颜色映射并随时间变化
  • 粒子脉动:粒子大小随正弦函数变化,产生呼吸效果
  • 坐标装饰:添加了半透明的坐标轴和边框

4. 动画系统

使用FuncAnimation实现平滑动画:

def update(frame):# 旋转视角angle = frame * 0.5ax.view_init(elev=30, azim=angle)# 更新粒子位置和大小# ...# 更新爱心颜色heart.set_array(np.sin(verts[:, 0] + frame * 0.1))

5. 界面设计

  • 黑色背景增强视觉效果
  • 动态变化的标题和副标题
  • 底部签名和时间戳
  • 关闭坐标轴和网格,聚焦爱心主体

技术亮点

  1. 复杂3D建模:使用数学方程定义复杂曲面
  2. 实时物理模拟:粒子在约束空间内的随机运动
  3. 高级渲染技术:透明效果、动态光照、表面着色
  4. 高效动画:优化更新机制确保流畅性
  5. 美学设计:精心选择的配色方案和视觉元素

运行说明

运行此代码需要安装以下Python库:

pip install numpy matplotlib scikit-image

程序会生成一个动态旋转的3D爱心,包含内部流动的粒子特效和周围的光晕效果。动画将持续运行,展示爱心的全方位视角。

这个创意项目展示了Python在科学计算可视化方面的强大能力,将数学之美通过编程转化为视觉艺术。

相关文章:

  • 缓存控制HTTP标头设置为“无缓存、无存储、必须重新验证”
  • AtCoder-abc407_e解析
  • Nginx+Tomcat负载均衡与动静分离架构
  • 13、企业应付管理(AP)全流程解析:从发票登记到付款完成
  • 【定时器】定时器存在的内存泄露问题
  • 机器学习14-迁移学习
  • HDFS分布式存储 zookeeper
  • 半导体制冷片(Thermoelectric Cooler,TEC)
  • C++查找算法全解析:从基础到高级应用
  • CppCon 2015 学习:Bridging Languages Cross-Platform
  • 每日八股文6.4补
  • Fluence推出“Pointless计划”:五种方式参与RWA算力资产新时代
  • 更新 Docker 容器中的某一个文件
  • spring-ai入门
  • springboot ErrorController getErrorPath() 版本变迁
  • 【Spark征服之路-2.1-安装部署Spark(一)】
  • 电力系统时间同步系统之二
  • 振动力学:欧拉-伯努利梁的弯曲振动(考虑轴向力作用)
  • 供应商管理系统
  • 【vibe coding解决100个问题】开发CRM管理系统, Augment/windsurf/bolt.new哪家强?
  • 大网站制作公司/长沙seo关键词
  • 网站建设公司宣传标语/新品怎么推广效果最好
  • 下载的网站模板怎么使用/郑州百度分公司
  • 做海购的网站/廊坊快速排名优化
  • 免费美国网站/谷歌浏览器引擎入口
  • 网站怎样制作图文排版/百度官网