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

1 效果图

2 说明

=====

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

《python3的matplotlib的模拟太阳-地球-月亮运动示意图代码分析》

2.2 这次再使用python3的语言,用matplotlib来实现太阳系的八大行星模拟示意图。

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

3 代码讲解:

=========

3.1 第1步:导入模块

import numpy as npfrom matplotlib import pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dimport matplotlib.animation as animmation

3.2 第2步:画布的相关设置

f = plt.figure(figsize=(15,15))   #绘图的画布大小和定义初始化f.patch.set_facecolor('black')   #画布背景颜色设置ax = f.add_subplot(111,projection='3d')   #设置3d坐标系#这个只是图表中的背景颜色设置ax.set_facecolor('black')# OR#ax.set(facecolor = 'black')#三维坐标刻度设置ax.set_xlim([-65, 65])ax.set_ylim([-65, 65])#模型在坐标系中的范围ax.set_zlim([-3, 3])

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

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

3.4 第4步:8大行星的半径、轨道和角度设置

#常量的设置#设置轨道半径r_list=[40,43,46,51,55,62,71,85]#设置行星角速度o_list=[13,9,7,6,5,4,3,2]#设置环绕一周时间的范围以及运动间隔时间t_range = np.arange(0, 1 + 0.005, 0.005)t_len = len(t_range)#行星坐标随时间变化方程#z坐标zz=np.zeros(t_len)#x和y坐标x_l_list=[]y_l_list=[]for i in range(len(r_list)):    x_l_list.append(r_list[i] * np.cos(o_list[i]* np.pi* t_range))    y_l_list.append(r_list[i] * np.sin(o_list[i]* np.pi* t_range))#绘制行星的圆形轨迹for i in range(len(r_list)):    #轨道线颜色和宽度设置    ax.plot(x_l_list[i], y_l_list[i], zz, 'gray',linewidth=0.2)

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

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

3.6 第6步:初始化行星的起始位置

def init():    return ball1,ball2, ball3,ball4,ball5,ball6,ball7,ball8  

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

def update(data): ball1.set_data([data[0], data[1]]) ball1.set_3d_properties(data[2]) ball2.set_data([data[3],data[4]]) ball2.set_3d_properties(data[5]) ball3.set_data([data[6], data[7]]) ball3.set_3d_properties(data[8]) ball4.set_data([data[9], data[10]]) ball4.set_3d_properties(data[11]) ball5.set_data([data[12], data[13]]) ball5.set_3d_properties(data[14]) ball6.set_data([data[15], data[16]]) ball6.set_3d_properties(data[17]) ball7.set_data([data[18], data[19]]) ball7.set_3d_properties(data[20]) ball8.set_data([data[21], data[22]]) ball8.set_3d_properties(data[23]) return 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 = init,interval = 200)#隐藏画轴plt.axis('off')plt.show()

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

(0)

相关推荐

  • Matplotlib等高线图

    等高线图(也称"水平图")是一种在二维平面上显示 3D 图像的方法.等高线有时也被称为 "Z 切片",如果您想要查看因变量 Z 与自变量 X.Y 之间的函数图像 ...

  • 高斯混合模型(GMM):理念、数学、EM算法和python实现

    高斯混合模型是一种流行的无监督学习算法.GMM方法类似于K-Means聚类算法,但是由于其复杂性,它更健壮,因此更有用. K-means聚类使用欧式距离函数来发现数据中的聚类.只要数据相对于质心呈圆形 ...

  • Python绘制参数方程图

    vscode里面自动的jupyter,有毒,用不了...要执行下面的操作 pip install pip-autoremove pip-autoremove.exe jupyter -y pip in ...

  • 用Python动画来展示二阶贝赛尔曲线

    说起来贝氏曲线,我们可能首先会想到下面这个男人: 图1. 一位不愿透露姓名的英国球员 但实际上我们说的不是这个叫贝克汉姆的英国男人,而是另外一个人,就是下面这个叫"皮埃尔·贝塞尔" ...

  • 生命科学中的 UMAP(降维算法)

    UMAP应该说是目前最好的降维算法了,能最大程度的保留原始数据的特征同时大幅度的降低特征维数. 这是<生命科学的数理统计和机器学习>的相关探讨,我试图介绍生物信息学.生物医学.遗传学等常见 ...

  • 用Python简单实现模拟太阳系运转

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 Python免费学习资料 ...

  • 用 Python 动态模拟太阳系运转

    来源:Python 技术「ID: pythonall」 提到太阳系,大家可能会想到哥白尼和他的日心说,或是捍卫.发展日心说的斗士布鲁诺,他们像一缕光一样照亮了那个时代的夜空,对历史感兴趣的小伙伴可以深 ...

  • 为何我们发现了上千颗系外行星,却找不到太阳系第九大行星

    1781年,对于人类来说,具有着非常重要的意义.这一年,英国天文学家赫歇尔发现了天王星. 在此之前,水星.金星.火星.木星.土星,都是早就被人类所熟知的.它们的发现实在太早,不仅没有任何记录,甚至被认 ...

  • 人类连宇宙930亿光年的直径都知道,为何找不到太阳系第九大行星

    在这个宇宙中,始终有无数的谜团在困扰着科学家.别说整个宇宙,即使是太阳系内,也有无数科学家找不到答案的谜题. 其中,第九大行星是否存在的问题,就让科学家们迟迟给不出答案. 有人会纳闷:科学家都能观测到 ...

  • 冥王星可怕到什么程度?它被踢出太阳系九大行星,真的不冤!

    冥王星位于太阳系的深处,那里远离太阳.冥王星曾被认为是狭义太阳系的边界,它长期被视为太阳系中的第九大行星.然而,如今的太阳系只有八大行星.那么,冥王星为什么会被踢出九大行星的行列呢?这颗遥远的星球究竟 ...

  • 曾是太阳系第九大行星,因为一点被残忍开除行星行列!

    几十年来,那个遥远的结冰体冥王星一直被认定为第九颗行星.那么为什么这个冰雪星球如今遭受到质疑了呢?为何冥王星被提出了太阳系中特有的行星之列呢? 正是在加州理工学院,冥王星被踢出了行星之列,天文学家布朗 ...

  • 太阳系九大行星为何只有地球有水?地球不缺水,为何卖水能致富?

    在城市里面生活的人,基本喝水都是要花钱,在农村里面那种能用池塘.河流.井里面的水直接喝水的年代也一去不复返.市面上面卖水的企业有很多,有的还卖成了中国首富,可见水对现在的人们来讲多么必须与珍贵. 我们 ...

  • 太阳系九大行星概况(2)

    木星是太阳系九大行星中最大的一个,它那圆圆的大肚子里能装下1300多个地球,质量是地球的318倍,是其它八大行星质量总和的2.5倍,天文学上把木星这类巨大的行星称为"巨行星"西方把 ...

  • 太阳系九大行星概况(1)

    从古至今,人类非常重视对太阳的观察和研究,在太阳系这个庞大家庭中,太阳就像是绝对威望的长辈,九大行星就是太阳的儿女,而那无数的环绕行星运转的卫星则像是太阳的孙子孙女.这十分形象地说明了太阳系物质结构转 ...