Найти угол треугольника, зная координаты 2 вершин, угол при одной вершине, длинны сторон, противолежащих углам?

Задача: есть две движущиеся точки с известными координатами, вектор скорости одной известен, у другой известен только модуль скорости. Нужно найти, на какой угол нужно повернуть вектор скорости, у которого известен только модуль. В заголовке, переформулированная задача, которую я пытаюсь решить на python:

def angle_between(v1: Vector2, v2: Vector2) -> float:
    a = angle_of(v1)  # Абсолютный угол (0-359)
    b = angle_of(v2)
    c = abs(a - b)
    return c if c <= 180 else c - 360

def velocity_angle(p1: Vector2, p2: Vector2, v1: Vector2, v2: Vector2) -> float:
    beta = angle_between(p1 - p2, v2)  # Известный угол
    alpha = degrees(asin((sin(beta) * v2.length()) / v1.length()))  # Нахожу угол по теореме синусов
    return alpha

При визуализации на pygame я вижу, пока известный вектор с углом beta постепенно поворачивается, вектор с найденным углом alpha виляет туда-сюда. Когда решаю задачу на бумаге - все работает, пути точек пересекаются правильно, а код не работает. Всё не могу понять почему.


Ответы (1 шт):

Автор решения: MBo

Вы получаете бета в градусах, а для вычисления синуса нужно перевести его в радианы.

А верна ли вся логика, сказать трудно, хорошо бы увидеть чертежик.

→ Ссылка