Advertisement

python模拟太阳系_模拟太阳系8大行星运行图:matplotlib实现

阅读量:

1 效果图

215661465_1_20210218050232271

2 说明

=====

2.1 我曾用matplotlib实现模拟太阳-地球-月亮的运行轨迹图,很受欢迎。

2.2 本次再次利用Python 3编程语言,并借助Matplotlib绘制太阳系中八大行星运动轨迹的可视化图形

2.3 熟悉python编程语言和思维,熟悉matplotlib作图。

3 代码讲解:

=========

3.1 第1步:导入模块

该文件包含一系列用于数值计算与可视化的库模块。其中包括一个名为numpy的基础数值计算库模块;一个名为matplotlib.pyplot的标准绘图接口;一个为三维绘图设计的工具包;以及一个用于创建动画的对象库模块。

第2步:绘制图形的画布配置。首先创建一个较大的绘图窗口,默认尺寸为宽高比为1:1并设定了分辨率参数res=72,默认分辨率值为72像素/英寸。随后初始化主绘图区,并指定使用三视图投影模式('3d')。接着给图表区域加上黑色背景以增强视觉效果。最后分别设置了x轴范围从-65到+65 y轴范围从-65到+65以及z轴范围从-3到+3以确保模型在适当的空间范围内呈现

3.3 第3步:太阳设置:形状,颜色和大小,位置固定

ax.plot([0], [0], [0], marker='o', color= 'red', markersize=70)

第3节第4步:配置8个行星的基本参数#常量配置#设定各行星运行所需的初始参数包括轨道半径列表r_values = [40.0,…85.0]以及对应的角速度值o_values = [13,…2]。接着定义完整的运行时间范围t_range = np.arange(从初始时刻开始到完成一圈的时间段内以极小增量递增)并计算总点数t_count = len(t_range)。随后建立各个天体的位置坐标数据结构:初始化z轴高度坐标为零数组zz = np.zeros(t_count),并分别计算x轴和y轴的位置坐标值列表x_coords与y_coords。具体而言,在每一时间点上:
对于每个天体i:
计算其x轴位置x_orbit_i = r_values[i] * cos(o_values[i] * π * t_range)
计算其y轴位置y_orbit_i = r_values[i] * sin(o_values[i] * π * t_range)
将这些位置值依次追加至列表中形成x_coords与y_coords数组。
完成所有天体的位置数据生成后:
绘制每个天体的完整运行轨迹图形
对于每个天体i:
使用相同的颜色(灰色)绘制其轨迹线并指定线条宽度为细线

3.5 第5步:8大行星颜色和大小设置

ball1, ball2, ball3, ball4, ball5, ball6, ball7, ball8 = ax.plot([], [], [], marker=’o’, color=['yellow', 'pink', 'blue', 'orange', 'brown', 'red', 'gray', 'green'], markersize=[10, 10, 10, 16, 16, 14, 14])

第6步:设置行星初始位置函数def init(): return initial_values

3.7 第7步:数据更新,随时间t的变换设置新的行星位置坐标

def update(data):
assign data to ball1 with [data[0], data[1]]
set ball1’s 3D properties to data[2]
assign [data[3],data[4]] to ball2’s data
set ball2’s 3D properties to data[5]
assign [data[6], data[7]] to ball3’s data
set ball3’s 3D properties to data[8]
assign [data[9], data[10]] to ball4’s data
set ball4’s 3D properties to data[11]
assign [data[12], data[13]] to ball5’s data
set ball5’s 3D properties to data[14]
assign [data[15],data[16]] to ball6's position
set its 3D attributes accordingly
assign [data[17],data[18]] for ball7's parameters
adjust its display settings
pass along the configuration values
return a collection of these interactive elements: ball1,ball2,ball3,ball4,ball5,ball6,ball7,ball8

3.8 第8步:8大行星的数据更新,随时间t变换的行星坐标def data_gen(): data = [] for ti in range(1,t_len): t = t_range[ti] #行星与太阳坐标的关系方程 xt1 = r_list[0] * np.cos(o_list[0] * np.pi* t) yt1 = r_list[0] * np.sin(o_list[0] * np.pi* t) xt2 = r_list[1] * np.cos(o_list[1] * np.pi* t) yt2 = r_list[1] * np.sin(o_list[1] * np.pi* t) xt3 = r_list[2] * np.cos(o_list[2]* np.pi * t) yt3 = r_list[2] * np.sin(o_list[2] * np.pi* t) xt4 = r_list[3] * np.cos(o_list[3]* np.pi * t) yt4 = r_list[3] * np.sin(o_list[3] * np.pi* t) xt5 = r_list[4] * np.cos(o_list[4]* np.pi * t) yt5 = r_list[4] * np.sin(o_list[4] * np.pi* t) xt6 = r_list[5] * np.cos(o_list[5] * np.pi* t) yt6 = r_list[5] * np.sin(o_list[5]* np.pi * t) xt7 = r_list[6] * np.cos(o_list[6] * np.pi* t) yt7 = r_list[6] * np.sin(o_list[6]* np.pi * t) xt8 = r_list[7] * np.cos(o_list[7] * np.pi* t) yt8 = r_list[7] * np.sin(o_list[7] * np.pi* t) zt=0 data.append([xt1,yt1,zt,xt2,yt2,zt,xt3,yt3,zt,xt4,yt4,zt,xt5,yt5,zt,xt6,yt6,zt,xt7,yt7,zt,xt8,yt8,zt]) return data

3.9 第9步:动画挂起和展示

ani被 animmation FuncAnimation对象设置为 f作为输入 update函数更新 frames设定为data_gen生成的帧数 init_func指定初始化函数 interval设定为200毫秒

分享出来,在动画中学习计算机编程,学习python思维。

全部评论 (0)

还没有任何评论哟~