Тут квадратное уравнение зарыто.
Обозначьте
|MSL_VEL - TGT_VEL|
за
t
.
Получите уравнение
TGT_DIR = (MSL_VEL-TGT_VEL)/t
Преобразуйте:
TGT_DIR*t = (MSL_VEL-TGT_VEL)
Но тут неизвестные вектор MSL_VEL и t. Но они связаны, ведь t - это длина вектора. Обозначим неизвестный вектор MSL_VEL как (x, y, z) Значит:
t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2
Ну и еще вы знаете, что скорость ракеты фиксированная же:
x^2+y^2+z^2 = MSL_SPEED^2
У вас тут 4 неизвестных и аж 5 уравнений (ведь первое - это векторное уравнение):
TGT_DIR_x*t = x - TGT_VEL_x
TGT_DIR_y*t = y - TGT_VEL_y
TGT_DIR_z*t = z - TGT_VEL_z
t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2
x^2+y^2+z^2 = MSL_SPEED^2
Раскройте скобки в 4-ом, подставьте туда пятое и из первых трех выразите x, y, z:
t^2 = MSL_SPEED^2+TGT_SPEED^2-2*TGT_VEL_x*(TGT_DIR_x -t*TGT_VEL_x)-... = MSL_SPEED^2+(1-2t)TGT_SPEED^2-2(TGT_DIR*TGT_VEL)
Там в конце векторное произведение векторов. Дальше сами раскройте и получите квадратное уравнение на t. Решите его по школьной формуле. Если дискриминант отрицательный, то решения тупо нет. Слишком быстро цель улепетывает. Потом не забудьте проверить, чтобы t получилось положительное. Потом подставьте t в первые 3 уравнения и найдите искомые x, y, z.
Еще можно так себе это все представить. Свяжем систему координат с целью. Тогда множество точек, куда может смотреть скорость ракеты - это сфера с центром в TGT_VEL и радиусом MSL_SPEED. Вам надо выбрать на этой сфере точку так, чтобы она была коллинеарна с вектором TGT_DIR. Т.е. у вас есть луч из центра координат вдоль векторо TGT_DIR. Вам надо найти где он пересечет сферу. Введите параметр t вдоль луча и дальше получите то же самое квадратное уравнение.