再发!很火的python的matplotlib的太阳月亮动图
1 说明:
======
1.1 我的这篇文章《python3的matplotlib的模拟太阳-地球-月亮运动示意图代码分析》很受大家喜欢,不少条友前来咨询,估计有点生疏。
1.2 后台数据:
1.3 今天还有条友,不知道怎么使用,故特别再发,详解。
2 环境:
=====
华为笔记本电脑、深度deepin-linux操作系统、python3.8和微软vscode编辑器。
(条友请注意:配置好自己的python,本机是python3.8,微软编辑器vscode,同时注意安装相关包)
3 效果图:
4 完整代码:#---第1步---导出模块--- import numpy as np import matplotlib as mpl from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D import matplotlib.animation as animmation #导出通用字体设置 from matplotlib import font_manager #定义引出字体模块、位置、大小, #可能出错的地方,这里需要自己下载字体 #hwfs=华文仿宋==中文字体,用来显示中文的 my_font = font_manager.FontProperties(fname="hwfs.ttf",size=20) #---第2步---初始化定义--- #r1的大小与月球的速度和距离地球距离有关,越大越不好,建议10 r1 = 10 #r2是月球与地球的半径大小 r2 = 2 #π=圆周率(Pai)是圆的周长与直径的比值 #omega1=2π是一个圆,是地球的运动一圈;1×π=为半圆。 omega1 = 2 * np.pi #定义omega2为几个π,与月球的公转速度有关 #建议24π=代表月球以地球公转的一圈分12部分,12+12半圈 #比如48π=24+24半圈,即将地球绕太阳一圈在分24部分,月球自转和公转的速度也加快 omega2 = 48 * np.pi #月球自转和公转的角度与地球公转的水平夹角 phi = 5 * np.pi / 180 #---第3步---更新函数定义--- def update(data): #声明为全局变量 global line1, line2 , line3 #地球公转运动的更新 line1.set_data([data[0], data[1]]) line1.set_3d_properties(data[2]) #月球运动更新 line2.set_data([data[3], data[4]]) line2.set_3d_properties(data[5]) #月球自转线的更新 line3.set_data([data[6], data[7]]) line3.set_3d_properties(data[8]) return line1,line2,line3, #---第4步---初始化框架--- def init(): global line1, line2, line3 ti = 0 t = t_drange[np.mod(ti, t_dlen)] xt1 = x0 + 2*r1 * np.cos(omega1 * t) yt1 = y0 + 2*r1 * np.sin(omega1 * t) zt1 = z0 + 0 xt2 = xt1 + 2*r2 * np.sin(omega2 * t) yt2 = yt1 + 2*r2 * np.cos(omega2 * t)/(np.cos(phi) * (1 + np.tan(phi) ** 2)) zt2 = zt1 + (yt2 - yt1) * np.tan(phi) xt21 = xt1 + r2 * np.sin(2 * np.pi * t_range) yt21 = yt1 + r2 * np.cos(2 * np.pi * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2)) zt21 = zt1 + (yt21 - yt1) * np.tan(phi) #地球位置、形状、颜色、大小设置 line1, = ax.plot([xt1], [yt1], [zt1], marker="o", color="blue",markersize=20) #月球位置、形状、颜色、大小设置 line2, = ax.plot([xt2], [yt2], [zt2], marker="o", color="orange",markersize=12) #月球绕地球的轨迹线和颜色purple=紫色 line3, = ax.plot(xt21, yt21, zt21, color="purple") return line1,line2,line3, #---第5步---运动数据的产生--- def data_gen(): global x0,y0,z0,t_dlen data = [] for ti in range(1,t_dlen): t = t_drange[ti] xt1 = x0 + r1 * np.cos(omega1 * t) yt1 = y0 + r1 * np.sin(omega1 * t) zt1 = z0 xt2 = xt1 + r2 * np.sin(omega2 * t) yt2 = yt1 + r2 * np.cos(omega2 * t)/(np.cos(phi) * (1 + np.tan(phi) ** 2)) zt2 = zt1 + (yt2 - yt1) * np.tan(phi) xt21 = xt1 + r2 * np.sin(2 * np.pi * t_range) yt21 = yt1 + r2 * np.cos(2 * np.pi * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2)) zt21 = zt1 + (yt21 - yt1) * np.tan(phi) data.append([xt1, yt1, zt1, xt2, yt2, zt2, xt21, yt21, zt21]) return data #---第6步---定义取值范围0~10,每个0.005取 #地球公转的轨迹线刻度,越小越好,建议0.005,否则轨迹线不是圆形,有锯齿样类圆形 t_range = np.arange(0, 10 + 0.005, 0.005) #地球公转速度,越大速度越大,建议0.005, t_drange = np.arange(0,10, 0.005 ) t_len = len(t_range) t_dlen = len(t_drange) #---第7步---三大星球的大小、颜色、坐标--- #太阳的坐标位置,三维坐标 x0 =y0=z0= 0 #地球的运动中的坐标 x1 = x0 + r1 * np.cos(omega1 * t_range) y1 = y0 + r1 * np.sin(omega1 * t_range) z1 = z0 + np.zeros(t_len) #---第8步---定义图片f和ax等--- #窗口大小也就是展示图片的画布大小:22=2200,14=1400,即2200×1400 #这是窗口的背景颜色,有区别,默认白色 f = plt.figure(figsize=(22,14),facecolor="black",edgecolor="white") #这是画布的背景颜色,默认白色 ax = f.add_subplot(111,projection="3d",facecolor="black") #---第9步---太阳和地球轨迹线设置--- #太阳的设置颜色,位置,大小 ax.plot([0], [0], [0], marker="o", color= "red", markersize=100) #地球公转的轨迹线和颜色g=green=绿色,三维坐标 ax.plot(x1, y1, z1, "g") #---第10步---图片的坐标刻度设置--- #坐标轴刻度虽然不显示,但刻度的标记对整个图形有一定的拉伸影响 #x坐标轴刻度范围 ax.set_xlim([-(r1 + 2), (r1 + 2)]) #y坐标轴刻度范围 ax.set_ylim([-(r1 + 5), (r1 + 5)]) #z坐标轴刻度范围 ax.set_zlim([-15, 15]) #---第11步---图片标题等设置--- #图示的标题 #动画走起,f图片挂起动画里,不断更新,interval = 20=数值越小,速度越快 ani = animmation.FuncAnimation(f, update, frames = data_gen(), init_func = init,interval = 20) #坐标及其刻度隐藏 plt.axis("off") #图片标题、字体、颜色 plt.title(u"太阳-地球-月亮模拟示意图", fontproperties=my_font,color="r") #图片展现 plt.show()
5 操作和效果图:
这步出错,估计是字体需要自己下载,提前下载华文仿宋.ttf=hwfs.ttf,放在根目录下。
本机没有报错,看懂了么?
===再发===
喜欢的朋友,可以点赞、关注、评论、转发和收藏。
看幼儿园实时视频要收费,家长不乐意了!老师那咱赶紧取消吧?点击右上角,关注幼儿园全攻略。人生百年,立于幼学。幼教不易,任重道远。这是一个没有隐私的时代,在大数据的监控下,你的爱好乐趣青睐都无处隐藏。同样不光是你的心里面的东西藏不了,你出门
产检一次多一个孩子,河南一孕妇生下3女1男四胞胎山河无恙,丈夫要一送三真是没想到啊,四胞胎能落到我们家,去做一次检查告诉我们多了一个,一段时间后再去做检查,医生又告诉我们是四胞胎。河南周口的周先生开心得难以掩饰脸上的笑容,全家人都在为家里这4个小天使
土豆新吃法火了,比薯条还好吃,不加一滴水,挑食宝宝吃完舔手指宝宝的消化能力还未成熟,常吃一些健脾养胃的食物作为辅食非常有必要,比如山药红薯土豆。而土豆中含有大量的蛋白质以及b族维生素,隔三岔五地给孩子吃点土豆泥可以促进肠胃消化,而且土豆中含
古人教子七不责今天看了一个视频觉得对于一些有孩子的家庭特别有用,那就是古人教子的一些大智慧,以下七种情况不要责备孩子。1对众不责当着好多人不要说孩子。2愧悔不责孩子知道错了不要再责备他了。3暮夜
广东睿智妈妈跟女儿的聊天记录,看完后,觉得家庭教育太重要了你们跟孩子的相处模式是什么样的呢?今天我看完了一位妈妈跟女儿的聊天记录,才真的意识到家庭教育的重要性。尤其是这位妈妈,她非常的聪明,有自己教育孩子的方法。从聊天记录当中可以看得出来
妈妈为让女儿长高每天逼其跳绳3000次,医生这样建议听说跳绳对长高有帮助,浙江有位虎妈,要求13岁的女儿天天跳绳,几乎风雨无阻。这个暑期,妈妈更为女儿加码,从原来的一天跳1000次,增加到早中晚各跳一千次。小姑娘每天咬牙坚持,直到她
民法典重大突破胎儿也算人以前民法相关规定,只有出生的人才有民事权利能力,所以胎儿不是人。但今年民法典修改有重大突破,胎儿也算人。根据民法典第十六条胎儿利益的特殊保护涉及遗产继承接受赠与等胎儿利益保护的,胎
如何增强宝宝免疫力?1,进行母乳喂养母乳当中含有多种营养物质,其中就有大量的免疫物质,如果想要增强孩子免疫力的话,那么最好是给孩子进行母乳喂养。2,进行亲子抚触亲子抚触不仅有利于宝宝的身体发育,而且还
入秋后别给孩子喝牛奶,用玉米和它打汁喝,健脾开胃,增强免疫力立秋以后经常看到农民伯伯沿街卖新鲜的玉米,买了几根回来用破壁机做早餐玉米汁,新鲜的玉米有一种只有这个季节才有的香甜,大家一定不要错过这一季的美食呀!杏仁糯米玉米汁玉米50g杏仁25
什么时候给宝宝戒纸尿裤?尿不湿的出现可能是很多宝妈的福音,她们带孩子出门时,再也不用担心孩子不能够控制自己的排尿时间,从而尿裤子,但是孩子到了一定阶段还是要戒纸尿裤的什么时候给宝宝戒纸尿裤?孩子到快2岁时
家里八个多月的宝宝辅食都吃几顿呢八个多月的宝宝,一般辅食要吃两顿了。而且这个月的辅食可以增加辅食的碎末和颗粒感了。今天中午给米多做了胡萝卜粥,然后里面加了牛肉和香菇,自己尝了下很香,但是因为11点喝了顿奶,加上上