You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现3D参数曲线的动态绘制及周期性循环运动?

动态循环3D参数曲线实现方案

针对需求,修改后的代码实现了逐点绘制曲线、phi持续旋转+theta简谐摆动、循环运动不停止三个核心功能:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from mpl_toolkits.mplot3d import Axes3D

# 参数定义
r = 20
h = 1.7
max_frames = 1000  # 控制动画步长数量
t_step = 0.05       # 时间步长,调节运动速度

# 初始化画布和3D轴
fig = plt.figure('Parametric pancake')
ax = fig.add_subplot(111, projection='3d')
ax.set_xlabel('X', fontweight='bold', fontsize=14)
ax.set_ylabel('Y', fontweight='bold', fontsize=14)
ax.set_zlabel('Z', fontweight='bold', fontsize=14)
ax.set_title('Parametric pancake', fontweight='bold', fontsize=16)

# 固定坐标轴范围,避免画面抖动
ax.set_xlim(-r-5, r+5)
ax.set_ylim(-r-5, r+5)
ax.set_zlim(-r-5, r+5)

# 初始化曲线、点对象和数据存储数组
line, = ax.plot([], [], [], '-r', linewidth=3)
point, = ax.plot([], [], [], 'bo', markersize=8)
x_data, y_data, z_data = [], [], []

def update(frame):
    # 计算当前时间参数
    t = frame * t_step
    # theta做简谐运动,范围锁定-π/2到π/2(对应-90°到90°)
    theta = (np.pi / 2) * np.sin(t)
    # phi持续旋转,取模实现循环,避免数值溢出
    phi = t % (2 * np.pi)
    
    # 计算当前点的三维坐标
    x = r * np.cos(phi)
    y = r * np.sin(phi) * np.cos(theta) - h * np.sin(theta)
    z = r * np.sin(phi) * np.sin(theta) + h * np.cos(theta)
    
    # 累积曲线数据,实现逐点绘制
    x_data.append(x)
    y_data.append(y)
    z_data.append(z)
    
    # 更新曲线和移动点的显示
    line.set_data_3d(x_data, y_data, z_data)
    point.set_data_3d(x, y, z)
    
    return line, point

# 创建循环动画,interval控制每帧间隔(毫秒),blit优化绘制效率
ani = FuncAnimation(fig, update, frames=max_frames, interval=20, blit=True, repeat=True)

plt.show()

关键修改说明

  • 逐点绘制:通过x_data、y_data、z_data数组累积每帧的点坐标,逐步更新曲线数据,实现从无到有的绘制过程
  • 周期性运动:
    • theta使用正弦函数实现简谐摆动,(np.pi/2)*np.sin(t)确保角度范围严格在-90°到90°之间
    • phi通过t % (2*np.pi)实现无限循环旋转,避免数值溢出同时保证持续转动
  • 循环不停止:FuncAnimation设置repeat=True,动画播放完指定帧数后自动重复,实现无限运动

内容的提问来源于stack exchange,提问作者SvylantisCPU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:10:32