网站首页 > 技术文章 正文
1 效果图
2 说明
=====
2.1 我曾用matplotlib实现模拟太阳-地球-月亮的运行轨迹图,很受欢迎。
《python3的matplotlib的模拟太阳-地球-月亮运动示意图代码分析》
2.2 这次再使用python3的语言,用matplotlib来实现太阳系的八大行星模拟示意图。
2.3 熟悉python编程语言和思维,熟悉matplotlib作图。
3 代码讲解:
=========
3.1 第1步:导入模块
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import 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思维。
猜你喜欢
- 2024-10-14 Python之Matplotlib数据可视化一:简易线形图
- 2024-10-14 圆:circle-sin-cos动画的matplotlib
- 2024-10-14 python 100天 68 利用Python绘制两个波形正弦sin函数相关性
- 2024-10-14 画直线不简单!python-matplotlib告诉你为什么
- 2024-10-14 用Python下一场流星雨,女生看了都哭了
- 2024-10-14 手把手教你使用Numpy、Matplotlib、Scipy等5个Python库
- 2024-10-14 走进Matplotlib世界(一)(matplotlib.org)
- 2024-10-14 Python 数据分析——matplotlib 坐标变换和注释
- 2024-10-14 利用axe对象绘制地图局部缩放图(下面几种建模对象能通过基本实体工具直接绘制的是)
- 2024-10-14 Python动态绘图的方法(上)(canvas python动态绘图)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)