2013-03-11 21 views

答えて

5

衛星が特定の経度を横切るとき、それが特定の緯度に達すると、特定の高さに達したとき、または最低の高度に降下したとき。 PyEphemはその速度が最大または最小のときに、それらのすべてに組み込み関数を提供しようとしません。代わりに、衛星属性と検索する属性の事前に決められた値との間の比較をゼロクロッシングで見つけることができるnewton()関数を提供します。ここで

http://docs.scipy.org/doc/scipy/reference/optimize.html

:scipyのダウンロードPythonライブラリを使用すると、特に悪い行儀機能を扱っている場合には、多くのPyEphemのnewton()機能よりも洗練されているいくつかの非常に慎重な検索機能が含まれてい

注意衛星(この例ではISS)が特定の経度を通過したときに、どのように検索して一般的なテクニックを表示するかを示します。これは最速のアプローチではありません。特に細かいことが分かっていると、毎分の検索がスピードアップする可能性がありますが、経度以外の値がある場合には非常に一般的で非常に安全です。あなたはまた、検索したい。私は何が起こっているのかを説明するためにドキュメントとコメントを追加しようとしました。なぜ単純な違いを返す代わりにznormを使うのですか?このスクリプトがあなたに役立つかどうかを教えてください。

import ephem 

line0 = 'ISS (ZARYA)    ' 
line1 = '1 25544U 98067A 13110.27262069 .00008419 00000-0 14271-3 0 6447' 
line2 = '2 25544 51.6474 35.7007 0010356 160.4171 304.1803 15.52381363825715' 

sat = ephem.readtle(line0, line1, line2) 
target_long = ephem.degrees('-83.8889') 

def longitude_difference(t): 
    '''Return how far the satellite is from the target longitude. 

    Note carefully that this function does not simply return the 
    difference of the two longitudes, since that would produce a 
    terrible jagged discontinuity from 2pi to 0 when the satellite 
    crosses from -180 to 180 degrees longitude, which could happen to be 
    a point close to the target longitude. So after computing the 
    difference in the two angles we run degrees.znorm on it, so that the 
    result is smooth around the point of zero difference, and the 
    discontinuity sits as far away from the target position as possible. 

    ''' 
    sat.compute(t) 
    return ephem.degrees(sat.sublong - target_long).znorm 

t = ephem.date('2013/4/20') 

# How did I know to make jumps by minute here? I experimented: a 
# `print` statement in the loop showing the difference showed huge jumps 
# when looping by a day or hour at a time, but minute-by-minute results 
# were small enough steps to bring the satellite gradually closer to the 
# target longitude at a rate slow enough that we could stop near it. 
# 
# The direction that the ISS travels makes the longitude difference 
# increase with time; `print` statements at one-minute increments show a 
# series like this: 
# 
# -25:16:40.9 
# -19:47:17.3 
# -14:03:34.0 
# -8:09:21.0 
# -2:09:27.0 
# 3:50:44.9 
# 9:45:50.0 
# 15:30:54.7 
# 
# So the first `while` loop detects if we are in the rising, positive 
# region of this negative-positive pattern and skips the positive 
# region, since if the difference is positive then the ISS has already 
# passed the target longitude and is on its way around the rest of 
# the planet. 

d = longitude_difference(t) 

while d > 0: 
    t += ephem.minute 
    sat.compute(t) 
    d = longitude_difference(t) 

# We now know that we are on the negative-valued portion of the cycle, 
# and that the ISS is closing in on our longitude. So we keep going 
# only as long as the difference is negative, since once it jumps to 
# positive the ISS has passed the target longitude, as in the sample 
# data series above when the difference goes from -2:09:27.0 to 
# 3:50:44.9. 

while d < 0: 
    t += ephem.minute 
    sat.compute(t) 
    d = longitude_difference(t) 

# We are now sitting at a point in time when the ISS has just passed the 
# target longitude. The znorm of the longitude difference ought to be a 
# gently sloping zero-crossing curve in this region, so it should be 
# safe to set Newton's method to work on it! 

tn = ephem.newton(longitude_difference, t - ephem.minute, t) 

# This should be the answer! So we print it, and also double-check 
# ourselves by printing the longitude to see how closely it matches. 

print 'When did ISS cross this longitude?', target_long 
print 'At this specific date and time:', ephem.date(tn) 

sat.compute(tn) 

print 'To double-check, at that time, sublong =', sat.sublong 

このスクリプトを実行すると、それは確かにISSがターゲット経度に達したとき(合理的な許容範囲内)の瞬間を発見したことを示唆しているときに私が得る出力:私は理解している場合には、

When did ISS cross this longitude? -83:53:20.0 
At this specific date and time: 2013/4/20 00:18:21 
To double-check, at that time, sublong = -83:53:20.1 
+0

申し訳ありませんが時間 "2013/04/20 00:18:21"は、経度-83.8889からの衛星標高は90度ですか、つまり、正確には経度-83.8889より上ですか? – mikesneider

+1

衛星はその経度のどこかにあります。もちろん、それは北極から南へのどこでもかまいません。そして、その経線の1つの点だけが、衛星がまっすぐになるでしょう。その経線に沿った残りのサイトについては、衛星は90°よりも低く、または地平線よりも低くなる。 –

関連する問題