鱼C论坛

 找回密码
 立即注册
查看: 2735|回复: 2

利用execl的数据库进行仿真

[复制链接]
发表于 2020-3-11 11:40:01 | 显示全部楼层 |阅读模式
2鱼币
仿真数据:来自于execl数据库中的空间坐标(X,Y,Z,T)
仿真目的:通过execl的空间坐标数据,利用python实现类似于飞行器飞行、起降的仿真
求大神给个思路,如何将execl中的大量数据联动到python开发平台内,然后通过类似于描点的方式模拟出飞机的起降,飞行路线。然后以3D的形式展现出来。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-11 11:41:46 | 显示全部楼层
类似于下面这段代码,是模拟日-地-月的运动轨迹,但是飞机的飞行路线要从execl数据库中导入,所以有些没有头绪。求大神解惑
  1. import numpy as np
  2. import matplotlib as mpl
  3. mpl.use("TkAgg")
  4. from matplotlib import pyplot as plt
  5. from mpl_toolkits.mplot3d import Axes3D
  6. import matplotlib.animation as animmation

  7. r1 = 10 #地球环绕轨迹的半径
  8. r2 = 1 #月球环绕轨迹的半径
  9. omega1 = 2 * np.pi #地球运动的角速度
  10. omega2 = 24 * np.pi #地球自转速度
  11. phi = 5.1454 * np.pi / 180 #地球自转轴角

  12. def update(data): #随时间t变换设置新的地球位置的坐标,也即是随animmation.FuncAnimation函数的帧数参数变化每一帧的不同坐标位置的图片对象参数
  13.     global line1, line2 , line3
  14.     line1.set_data([data[0], data[1]])
  15.     line1.set_3d_properties(data[2])
  16.     line2.set_data([data[3], data[4]])
  17.     line2.set_3d_properties(data[5])
  18.     line3.set_data([data[6], data[7]])
  19.     line3.set_3d_properties(data[8])
  20.     return line1,line2,line3,

  21. def init(): #地球的起始位置
  22.     global line1, line2, line3
  23.     ti = 0
  24.     t = t_drange[np.mod(ti, t_dlen)]
  25.     xt1 = x0 + r1 * np.cos(omega1 * t)
  26.     yt1 = y0 + r1 * np.sin(omega1 * t)
  27.     zt1 = z0 + 0
  28.     xt2 = xt1 + r2 * np.sin(omega2 * t)
  29.     yt2 = yt1 + r2 * np.cos(omega2 * t)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
  30.     zt2 = zt1 + (yt2 - yt1) * np.tan(phi)
  31.     xt21 = xt1 + r2 * np.sin(2 * np.pi * t_range)
  32.     yt21 = yt1 + r2 * np.cos(2 * np.pi * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
  33.     zt21 = zt1 + (yt21 - yt1) * np.tan(phi)
  34.     line1, = ax.plot([xt1], [yt1], [zt1], marker='o', color='blue',markersize=8)
  35.     line2, = ax.plot([xt2], [yt2], [zt2], marker='o', color='orange',markersize=4)
  36.     line3, = ax.plot(xt21, yt21, zt21, color='purple')
  37.     return line1,line2,line3

  38. def data_gen(): #随时间t变换的地球和月球坐标,也即是animmation.FuncAnimation函数的帧数参数
  39.     global x0,y0,z0,t_dlen
  40.     data = []
  41.     for ti in range(1,t_dlen):
  42.         t = t_drange[ti]
  43.         xt1 = x0 + r1 * np.cos(omega1 * t)
  44.         yt1 = y0 + r1 * np.sin(omega1 * t)
  45.         zt1 = z0
  46.         xt2 = xt1 + r2 * np.sin(omega2 * t)
  47.         yt2 = yt1 + r2 * np.cos(omega2 * t)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
  48.         zt2 = zt1 + (yt2 - yt1) * np.tan(phi)
  49.         xt21 = xt1 + r2 * np.sin(2 * np.pi * t_range)
  50.         yt21 = yt1 + r2 * np.cos(2 * np.pi * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
  51.         zt21 = zt1 + (yt21 - yt1) * np.tan(phi)
  52.         data.append([xt1, yt1, zt1, xt2, yt2, zt2, xt21, yt21, zt21])
  53.     return data

  54. t_range = np.arange(0, 1 + 0.005, 0.005) #设置环绕一周时间的范围以及运动间隔时间
  55. t_drange = np.arange(0, 1, 0.005 )
  56. t_len = len(t_range)
  57. t_dlen = len(t_drange)
  58. #sun's coordination
  59. x0 = 0
  60. y0 = 0
  61. z0 = 0
  62. #地球轨道
  63. x1 = x0  + r1 * np.cos(omega1 * t_range)
  64. y1 = y0 + r1 * np.sin(omega1 * t_range)
  65. z1 = z0 + np.zeros(t_len)

  66. #月球轨道
  67. x2 = x1 + r2 * np.sin(omega2 * t_range)
  68. y2 = y1 + r2 * np.cos(omega2 * t_range)/(np.cos(phi) * (1 + np.tan(phi) ** 2))
  69. z2 = z1 + (y2 - y1) * np.tan(phi)


  70. f = plt.figure(figsize=(6,6)) #绘图的画布
  71. ax  = f.add_subplot(111,projection='3d') #设置3d坐标系
  72. ax.set_title("Sun-Earth-Moon Model") #设置图像标题(太阳-地球-月亮转动模型)

  73. ax.plot([0], [0], [0], marker='o', color= 'red', markersize=16) #绘制太阳的各种属性
  74. ax.plot(x1, y1, z1, 'r') #绘制地球图像
  75. ax.plot(x2, y2, z2, 'b') #绘制月球图像
  76. ax.set_xlim([-(r1 + 2), (r1 + 2)]) #太阳用动模型在坐标系中的范围
  77. ax.set_ylim([-(r1 + 2), (r1 + 2)]) #地球用动模型在坐标系中的范围
  78. ax.set_zlim([-5, 5]) #月球用动模型在坐标系中的范围

  79. #红色球体代表太阳,蓝色球体代表地球,橙色球体代表月亮
  80. line1, = ax.plot([], [], [], marker='o', color='blue',markersize=8,animated = True)
  81. line2, = ax.plot([], [], [], marker='o', color='orange',markersize=4,animated = True)
  82. line3, = ax.plot([], [], [], color='purple',animated = True)

  83. # 将上述函数对象传如animmation.FuncAnimation函数以生成连读的地球运动模型
  84. ani = animmation.FuncAnimation(f, update, frames = data_gen(), init_func = init,interval = 20)

  85. plt.show()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-11 16:51:34 | 显示全部楼层
我也不太懂,但刚从知乎上看见一篇python中的excel用法:https://zhuanlan.zhihu.com/p/38875272  希望能帮到你
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 05:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表