|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我在模拟地球公转曲线,代码如下:import numpy as np
import matplotlib as mpl
mpl.use("TkAgg")
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animmation
L1 = 10 #地球环绕轨迹的半径
v = 2*np.pi #地球运动的角速度
t = 0
def updata (data): #随时间t变换设置新的地球位置的坐标,也即是随animmation.FuncAnimation函数的帧数参数变化每一帧的不同坐标位置的图片对象参数
global line
line.set_data([data[0], data[1]])
line.set_3d_properties(data[2])
return line,
def init(): #地球的起始位置
global line
ti = 0
t = t_drange[np.mod(ti, t_dlen)]
xt1 = x0 + L1 * np.cos(v * t)
yt1 = y0 + L1 * np.sin(v * t)
zt1 = z0 + 0
line, = ax.plot([xt1], [yt1], [zt1], marker='o', color='blue',markersize=8)
return line
def data_gen(): #随时间t变换的地球坐标,也即是animmation.FuncAnimation函数的帧数参数
global x0,y0,z0,t_dlen, t
data = []
for ti in range(1,t_dlen):
xt1 = x0 + L1 * np.cos(v * t) # 地球与太阳坐标关系方程
yt1 = y0 + L1 * np.sin(v * t) # 地球与太阳坐标关系方程
zt1 = z0
data.append([xt1, yt1, zt1])
return data
t = t_drange[ti]
t_range = np.arange(0, 1 + 0.005, 0.005)#设置环绕一周时间的范围以及运动间隔时间
t_drange = np.arange(0, 1, 0.005 )
t_len = len(t_range)
t_dlen = len(t_drange)
x0 = 0
y0 = 0
z0 = 0
x1 = x0 + L1 * np.cos(v * t_range)#地球坐标随时间变化的方程
y1 = y0 + L1 * np.sin(v * t_range)#地球坐标随时间变化的方程
z1 = z0 + np.zeros(t_len)
f = plt.figure(figsize=(6,6))#绘图的画布
ax = f.add_subplot(111,projection='3d')#设置3d坐标系
ax.set_aspect('equal')
ax.set_title("Sun-Earth-Moon Model")#设置图像标题
ax.plot([0], [0], [0], marker='o', color= 'red', markersize=16)#绘制太阳的各种属性
ax.plot(x1, y1, z1, 'r')#绘制地球图像
ax.set_xlim([-(L1 + 2), (L1 + 2)])#地球用动模型在坐标系中的范围
ax.set_ylim([-(L1 + 2), (L1 + 2)])#地球用动模型在坐标系中的范围
ax.set_zlim([-5, 5])#地球用动模型在坐标系中的范围
line, = ax.plot([], [], [], marker='o', color='blue',markersize=8,animated = True)#地球的形状颜色等属性
ani = animmation.FuncAnimation(f, updata, frames = data_gen(), init_func = init,interval = 20)#将上述函数对象传如animmation.FuncAnimation函数以生成连读的地球运动模型
plt.show()
47行的报错为:
C:\Users\Admin\PycharmProjects\shiyan\venv\Scripts\python.exe C:/Users/Admin/Desktop/2.py
Traceback (most recent call last):
File "C:/Users/Admin/Desktop/2.py", line 47, in <module>
ax.set_aspect('equal')
File "C:\Users\Admin\PycharmProjects\shiyan\venv\lib\site-packages\matplotlib\axes\_base.py", line 1264, in set_aspect
'It is not currently possible to manually set the aspect '
NotImplementedError: It is not currently possible to manually set the aspect on 3D axes
Process finished with exit code 1
It is not currently possible to manually set the aspect on 3D axes的翻译为(当前无法在3D轴上手动设置长宽比)
当我把47行注释之后仿真图可以出来可是一直处于静止状态,估计就是47行语句关于设置3D画面出现的问题
急求大神解惑 |
|