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

3D手臂动画update_lines函数实现求助:仅显示当前时刻模型

解决Matplotlib 3D手臂动画的update_lines函数问题

问题场景

需要制作一个由两段结构(三个点A、B、C,坐标存储在shape为(n,3)的numpy数组中)组成的3D手臂动画,要求仅显示t时刻(0到n之间)的手臂,所有“之前”的手臂必须被清除。目前卡在update_lines函数的编写上,现有代码如下:

walks = [A, B, C]
num_steps = max([i.shape[0] for i in walks])

# Attaching 3D axis to the figure
fig = plt.figure()
ax = fig.add_subplot(projection="3d")

# Create lines initially without data
lines = [ax.plot([], [], [])[0] for _ in range(len(walks)-1)]

''' # Setting the Axes properties
ax.set(xlim3d=(min([np.nanmin(i[:,0]) for i in walks]), max([np.nanmax(i[:,0]) for i in walks])), xlabel='X')
ax.set(ylim3d=(min([np.nanmin(i[:,1]) for i in walks]), max([np.nanmax(i[:,1]) for i in walks])), ylabel='Y')
ax.set(zlim3d=(min([np.nanmin(i[:,2]) for i in walks]), max([np.nanmax(i[:,2]) for i in walks])), zlabel='Z')''' 

# Creating the Animation object
ani = animation.FuncAnimation(
    fig, update_lines, num_steps, fargs=(walks, lines), interval=100)

plt.show()

解决方案

核心是编写update_lines函数,在每一帧替换线段的端点数据,仅保留当前时刻的手臂线段:

import matplotlib.animation as animation
import numpy as np
import matplotlib.pyplot as plt

# 替换成你的A、B、C数组
# A = np.random.rand(50, 3)
# B = np.random.rand(50, 3)
# C = np.random.rand(50, 3)

def update_lines(t, walks, lines):
    # 更新第一段手臂:A[t] -> B[t]
    line_ab = lines[0]
    line_ab.set_data(
        [walks[0][t, 0], walks[1][t, 0]],
        [walks[0][t, 1], walks[1][t, 1]]
    )
    line_ab.set_3d_properties([walks[0][t, 2], walks[1][t, 2]])
    
    # 更新第二段手臂:B[t] -> C[t]
    line_bc = lines[1]
    line_bc.set_data(
        [walks[1][t, 0], walks[2][t, 0]],
        [walks[1][t, 1], walks[2][t, 1]]
    )
    line_bc.set_3d_properties([walks[1][t, 2], walks[2][t, 2]])
    
    return lines

关键细节

  • 帧索引t:FuncAnimation会自动传入当前帧的索引,范围从0到num_steps-1,对应每个时刻的手臂位置。
  • 替换线段数据:通过set_data设置XY坐标,set_3d_properties设置Z坐标,直接覆盖旧数据,实现“清除之前手臂”的效果。
  • 返回线段对象:必须返回更新后的线段列表,Matplotlib依赖这个返回值重绘画面。

建议取消注释坐标轴范围的代码,确保动画过程中所有手臂位置都在视野内,避免坐标轴自动缩放导致画面晃动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:44:53