首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用python生成地球运动的动态模拟动态图

python作为一门简单易学且应用范围极广的语言有着其他语言无法比拟的优势,通过python可以实现各种各样的功能,例如我们可以利用python matplotlib的绘图库实现各种动态模拟仿真,在科学实验中有着极大的应用价值。下列是通过python实现地球公转的动态模拟图:

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 #地球运动的角速度

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

data = []

for ti in range(1,t_dlen):

t = t_drange[ti]

xt1 = x0 + L1 * np.cos(v * t)#地球与太阳坐标关系方程

yt1 = y0 + L1 * np.sin(v * t)#地球与太阳坐标关系方程

zt1 = z0

data.append([xt1, yt1, zt1])

return data

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()

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181001A0TMOJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券