python - Python Matplotlib FuncAnimation:在两个移动点之间绘制一条线
问题描述
我试图解决的问题如下:
我有两个点在空间中任意移动,我需要绘制一条将一个点连接到另一个点的线。
代码似乎可以工作,但它不是“写得很好”。任何人都可以帮助我吗?
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
###############################################################################
s="\n"
print(s*100)
###############################################################################
# Create Trajectory H:
def make_trajectory_H(n):
x_0_H = -0.1
y_0_H = 0
z_0_H = 0
x_H = x_0_H*np.sin(2*np.pi*f*t)
y_H = y_0_H*np.sin(2*np.pi*f*t)
z_H = z_0_H*np.sin(2*np.pi*f*t)
trajectory_H = np.vstack((x_H, y_H, z_H))
return trajectory_H
# Create Trajectory B:
def make_trajectory_B(n):
x_0_B = -0.1
y_0_B = 0
z_0_B = 0
x_B = x_0_B*np.sin(2*np.pi*f*t+1)
y_B = y_0_B*np.sin(2*np.pi*f*t)
z_B = z_0_B*np.sin(2*np.pi*f*t)-.3
trajectory_B = np.vstack((x_B, y_B, z_B))
return trajectory_B
# Update AUV position for plotting:
def update(num, data_H, data_B, auv_H, auv_B, trj_H, trj_B) :
for line, data in zip(auv_H, data_H) :
line.set_data(data[0:2, num-1:num])
line.set_3d_properties(data[2,num-1:num])
for line, data in zip(auv_B, data_B) :
line.set_data(data[0:2, num-1:num])
line.set_3d_properties(data[2,num-1:num])
for line, data in zip(trj_H, data_H) :
line.set_data(data[0:2, :num])
line.set_3d_properties(data[2,:num])
for line, data in zip(trj_B, data_B) :
line.set_data(data[0:2, :num])
line.set_3d_properties(data[2,:num])
auv_L=ax.plot([data_L[0][0][num-1], data_L[1][0][num-1]], [data_L[0][1][num-1], data_L[1][1][num-1]], [data_L[0][2][num-1], data_L[1][2][num-1]],'-k')
ax.lines.pop(3)
return auv_H, auv_B, trj_H, trj_B,
###############################################################################
# Attach 3D axis to the figure
fig = plt.figure()
ax = p3.Axes3D(fig)
# Define no. temporal steps, max time of observation and create trajectory:
n = 100
t_max = 20
t = np.linspace(0, t_max, n)
f = 50
data_H = [make_trajectory_H(n)]
data_B = [make_trajectory_B(n)]
data_L = data_H+data_B
# data_L[0][-][...] -> H data
# data_L[1][-][...] -> B data
# data_L[-][0][x_1, x_2, ..., x_n] -> x data
# data_L[-][1][y_1, y_2, ..., y_n] -> y data
# data_L[-][2][z_1, z_2, ..., z_n] -> z data
# Create first line objects:
auv_H = [ax.plot(data_L[0][0], data_L[0][1], data_L[0][2], 'ro')[0]]
auv_B = [ax.plot(data_L[1][0], data_L[1][1], data_L[1][2], 'bo')[0]]
#auv_L = [ax.plot([data_L[0][0], data_L[1][0]], [data_L[0][1], data_L[1][1]], [data_L[0][2], data_L[1][2]],'-k')[0]]
trj_H = [ax.plot(data_L[0][0], data_L[0][1], data_L[0][2],'r',alpha=1)[0]]
trj_B = [ax.plot(data_L[1][0], data_L[1][1], data_L[1][2],'b',alpha=1)[0]]
# Set the axes properties
ax.set_xlim3d([-.15, 0.15])
ax.set_xlabel('X')
ax.set_ylim3d([-.15, 0.15])
ax.set_ylabel('Y')
ax.set_zlim3d([-.15, 0.15])
ax.set_zlabel('Z')
ax.set_title('3D Test')
# Creating the Animation object
ani = animation.FuncAnimation(fig, update, n, fargs=(data_H, data_B, auv_H, auv_B, trj_H, trj_B),
interval=500, blit=False, repeat=False)
plt.show()
它做了它应该做的,但我通过“反复试验”做到了。谁能告诉我编写此例程的“正确方法”?
解决方案
推荐阅读
- r - 在 R 中绘制 LASSO 模型的交互效果
- c# - Asp.net Core:无法访问已处置的对象(不同的错误)
- linux - 无法在 Kali Linux 上为 TP-Link WN821N 构建 RTL8192EU 驱动程序
- python - SKLearn 多分类,无需预先了解 Python 中的分类
- r - 在加权无向图中测量社区之间的距离
- vba - 公式计算出值后,如何将公式更改为静态值?
- java - 在spring boot中创建一个REST API来上传Multipart文件数据
- macos - 什么是 CGEvent 中的像素单元(CGScrollEventUnit.pixel)?
- postgresql - Heroku Postgres 在排序时忽略下划线
- amazon-web-services - 我正在尝试将 csv 文件导入 HDFS。我收到一个错误,指出:-cp:没有足够的参数预期 2 但得到 1?