Не получаю значение направления в моем расчете скорости

Я работаю над наземной станцией, чтобы отслеживать наш будущий куб-спутник, одна из вещей, необходимых для расчета доплеровского сдвига частоты, когда он проходит над головой. Чтобы проверить это, мы используем ISS TLE. Я использую Skyfield, и это было очень полезно, но у меня возникла простая проблема, которую я не могу понять. Мне нужна скорость объекта, которая была легко достигнута, но мне также нужно направление относительно моего положения. Я предположил, что это будет частью вектора скорости, поскольку скорость - это и величина, и направление. Возможно, мне не хватает чего-то очевидного в коде, способ, которым это исправлено на данный момент, - это получить расстояние в два момента времени и выяснить, приближается ли оно или отдаляется. Затем я просто умножаю вектор на -1, если он приближается, и на 1 в противном случае. Я подумал, что что-то подобное можно сделать с помощью функции .velocity, но это не так.

diff = satObsDiff.at(ts_now)
diff1 = satObsDiff.at(ts_next)

velocity = diff.speed().km_per_s * 1000 #converts km to m
print("Velocity: ")
print(velocity)
adjusted_velocity = velocity

range1 = diff.distance().km
range2 = diff1.distance().km
change = (range1 - range2)*1000

direction = 1

if change >= 0:
    direction = 1
else:
    direction = -1

observed_freq = ((C/(C + (adjusted_velocity * direction))) * emitted_freq)

person Greg Jenkins    schedule 25.07.2019    source источник


Ответы (1)


Скалярное произведение двух векторов положительно, если они указывают в одном направлении, равно нулю, если они расположены под прямым углом, и отрицательно, если они направлены друг от друга. Поэтому я подозреваю, что вы можете отличить приближение от удаляющегося спутника, вычислив скалярное произведение относительного положения на скорость и проверив, больше или меньше нуля:

d = np.dot(velocity.km, diff.position.km)
if d > 0:
   print('receding')
else:
   print('approaching')

Вы также можете добавить какое-то деление, если хотите знать, как быстро меняется диапазон:

https://stackoverflow.com/a/55226228/85360

person Brandon Rhodes    schedule 15.11.2019