궤도를 도는 위성이 n주기 후에 지구상의 특정 지점을 통과할지 예측할 수 있습니까?
나는 기본적인 천체 역학을 배우고 있는데 인터넷에서 찾을 수없는 질문이 있습니다 (아마도 충분히 열심히 보지 않을 수도 있습니다).
내 질문은 현재 기간이 아니라면 다음 n 기간 동안 위성이 지구상의 특정 지점을 통과하는 데 필요한 기간을 예측하는 방법이 있습니까? 아니면 그럴 것인지 계산할까요?
좀 더 구체적으로 말하자면 현재 기간의 어느 시점에서 위성이 도시 A를 비행하지만 도시 B에서는 비행하지 않는다고 가정 해 봅시다. 이제 우리는 각 기간이 지나면 궤도가 서쪽으로 이동하여 비행하지 않을 수도 있다는 것을 알고 있습니다. 그 기간에 도시 A를 넘어 도시 B를 날아갈 수 있습니다. 위성의 궤도가 도시 B와 정렬되는 데 걸리는 기간 수 또는 시간을 어떻게 계산합니까?
여기 시각화 목적으로 그린 엉뚱한 이미지가 있습니다 .. :)

감사! :)
답변
Python 코드 사용 uhoh에서 ...의 지상 추적 기간을 어떻게 결정합니까?
그리고 대권 거리 파이썬에서 크리스 웹이에서, 나는 2020년 11월 17일 후 사일 동안 지구에 주어진 참조 점에 ISS 지상 트랙의 거리를 플롯하는 프로그램을 썼습니다.

최소 거리는 113.81km이며 4 일마다 1 분마다 계산됩니다. ISS는 작은 스텝 사이즈를 사용하여 발견 된 최소값을 매우 빠르게 변경합니다.
every 60 seconds of 2 days : 150.12 km
every 30 seconds of 2 days : 71.40 km
every 15 seconds of 2 days : 55.43 km
그러나 4 일 동안 5 초마다 계산하려면 너무 많은 메모리와 시간이 필요합니다.
ISS의 궤도 높이와주기는 일정하지 않습니다 . ISS 높이를 참조하십시오 . 따라서 며칠에 대한 예측 만 가능하지만 더 긴 시간과 결과적으로 다시 부스트되지는 않습니다.
import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Loader, Topos, EarthSatellite
import greatcircle
TLE = """1 44303U 98067QA 20320.43936697 .00008076 00000-0 12168-3 0 9990
2 44303 51.6405 305.3910 0005107 159.4387 200.6810 15.55769424 83251
"""
L1, L2 = TLE.splitlines()
load = Loader('~/Documents/fishing/SkyData') # avoids multiple copies of large files
data = load('de421.bsp')
earth = data['earth']
ts = load.timescale(builtin=True)
minutes = np.arange(60. * 24 * 4) # four days
time = ts.utc(2020, 11, 17, 0, minutes) # start November 17, 2020
ISS = EarthSatellite(L1, L2)
subpoint = ISS.at(time).subpoint()
lon = subpoint.longitude.degrees
lat = subpoint.latitude.degrees
# great circle distance
if True :
# reference point on Earth for distance calculation
ref_point_lat = 49.619832
ref_point_lon = 11.037711
gc = greatcircle.GreatCircle()
MEAN_EARTH_RADIUS_KM = 6371
gc.name1 = "reference point"
gc.latitude1_degrees = ref_point_lat
gc.longitude1_degrees = ref_point_lon
dist_km = np.zeros_like(lat, float)
hours = np.zeros_like(lat, float)
gc.name2 = "ISS"
min_dist = 2.0 * np.pi * MEAN_EARTH_RADIUS_KM
for i in range(len(lat)) :
gc.latitude2_degrees = lat[i]
gc.longitude2_degrees = lon[i]
gc.calculate()
if gc.valid == True :
dist_km[i] = MEAN_EARTH_RADIUS_KM * gc.central_angle_radians
hours[i] = minutes[i] / 60.
min_dist = min(dist_km[i], min_dist) # finding minimum distance
print('minimum distance {: 5.2f} km'.format( min_dist))
fig, ax = plt.subplots(figsize=(6, 6))
plt.plot(hours, dist_km)
ax.set_title("ISS pass over a specific point on Earth")
ax.set_xlabel('time hours')
ax.set_ylabel('distance km')
plt.show()
그동안 찾았습니다.
length_of 함수를 사용하여 arcminute 길이, 자오선, 적도 및 극 지름을 확인합니다.
from skyfield.api import Topos, load
from skyfield.functions import length_of
ts = load.timescale(builtin=True)
t = ts.utc(2021, 1, 1)
b1 = Topos(0., 0., elevation_m=0.0)
b2 = Topos(1. / 60., 0., elevation_m=0.0)
print(round(length_of(b1.at(t).position.km - b2.at(t).position.km), 5))
b3 = Topos(90., 0., elevation_m=0.0)
b2 = Topos(90.0 - 1. / 60., 0., elevation_m=0.0)
print(round(length_of(b3.at(t).position.km - b2.at(t).position.km), 5))
b2 = Topos(0., 1. / 60., elevation_m=0.0)
print(round(length_of(b1.at(t).position.km - b2.at(t).position.km), 5))
b4 = Topos(90., 0., elevation_m=0.0)
print(round(length_of(b1.at(t).position.km - b4.at(t).position.km), 3))
b5 = Topos(0., 180., elevation_m=0.0)
print(round(length_of(b1.at(t).position.km - b5.at(t).position.km), 3))
b6 = Topos(-90., 0., elevation_m=0.0)
print(round(length_of(b4.at(t).position.km - b6.at(t).position.km), 3))
#Meridianminute of geographic lattitude at the equator 1842.90 m,
#but at the poles 1861.57 m
#arclength of an arcminute at the equator 1855.31 m.
#a meridian from equator up to a pole 10,001.966 km
#equator diameter 12,756.27 km
#pole diameter 12,713.50 km
결과는 매우 정확합니다.
- 1.8429 킬로미터
- 1.86157 킬로미터
- 1.85532 킬로미터
- 9004.939 km
- 12756.273 km
- 12713.504 km
물론 자오선은 지표면이 아닌지면을 통해 측정되므로 10,001.966km, 직선, 큰 원이 아닌 9004.939입니다.