Для задания по математике в школе я исследую орбиту Международной космической станции вокруг Земли. Я понимаю, что когда 3D-движение в пространстве представлено на 2D-поверхности, соотношение не является синусоидальным, однако я создал следующую (простую) модель, которая, как я не уверен, является наиболее точной. Ниже вы также можете найти мои расчетные значения с формулой (выделены красным) в сравнении с фактическими значениями из онлайн-API. Любая помощь в улучшении этого будет принята с благодарностью!
(Это относится только к одной из кривых (той, что изображена ниже), так как волна смещается на 22,5 градуса вправо после каждого цикла.)
Мои данные можно найти в следующем документе Google: https://docs.google.com/spreadsheets/d/1Ac8yQn8ybdtZWK8JyKAOIw46o3UJufAoidR5unjVeHs/edit?usp=sharing .
tl;dr: используйте параметрическое уравнение .
Если бы Земля не вращалась, то у нас было бы что-то вроде
где радиус орбиты равен 1, является и - орбитальный период, а есть наклонение орбиты.
Тогда у нас было бы
Если Земля вращается, то
где является и - звездные сутки (примерно 23 часа, 56 минут, 4 секунды).
Решение этого для долготы как функции широты выглядит как серьезная работа, и я не уверен, что есть аналитическое решение.
Вместо этого вы можете попробовать метод параметрического уравнения , где вы сначала составляете скрытую таблицу времени, а затем решаете для нее. и и сюжет против
Вот сюжет, я не регулировал или и просто использовал приблизительные значения для , и но этого должно быть достаточно, чтобы вы смотрели.
и представлять известные начальные условия космического корабля, который вы пытаетесь построить; это время, когда он пересекает экватор на север, и - долгота на Земле под космическим кораблем в это время.
Вот еще чтение:
Скрипт Python:
import numpy as np
import matplotlib.pyplot as plt
twopi = 2*np.pi
to_degs, to_rads = 180/np.pi, np.pi/180.
omega = twopi/(92*60)
omega_E = twopi/(23*3600 + 56*60 + 4)
time = 60 * np.arange(101.) # 100 minutes
t0 = 1000. # arbitrary, you can fit this later
inc = 51.
const = 1.0 # arbitrary, you can fit this later
x = np.cos(omega * (time-t0))
y = np.sin(omega * (time-t0)) * np.cos(to_rads*inc)
z = np.sin(omega * (time-t0)) * np.sin(to_rads*inc)
lon = np.arctan2(y, x) - omega_E * (time-t0) + const
lat = np.arcsin(z)
if True:
plt.figure()
plt.plot(to_degs*lon, to_degs*lat, '.k')
plt.xlim(-180, 180)
plt.ylim(-60, 60)
#plt.gca().set_aspect('equal')
plt.show()
ооо
ооо
ооо