Как сделать направление луча в сторону мыши?

Разбираюсь с ray-casting и пытаюсь сделать так, чтобы пускаемые лучи были направлены в сторону курсора мыши, как в 2d шутерах с видом сверху.

Как я понял, нужно найти угол между вектором, который выходит из координат героя в координаты мыши и осью кординат, на которой находится игрок.

Я нахожу этот угол вот такой функцией, но это работает как-то не так:

float get_angel_mouse_sin() {
    float distance = sqrt((Mouse::getPosition(window).x - position.x) *
        (Mouse::getPosition(window).x - position.x) + 
        (Mouse::getPosition(window).y - position.y) *
        (Mouse::getPosition(window).y - position.y));
    return (Mouse::getPosition(window).y - position.y) / distance;
}

То есть, я нахожу расстояние от игрока до курсора - это гипотенуза. Далее, делю противолежащий катет на гипотенузу.

Что делаю не так? Может ли мне кто-нибудь помочь?


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

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

Чтобы найти угол надо использовать atan2, в которую передать разности координат.

Синусы и косинусы однозначно обратить не получится.

→ Ссылка
Автор решения: xmurik

для того, чтобы прицеливаться курсором мыши, нужны две переменные. позиция мыши (абсолютное, то есть в координатах окна), позиция игрока (абсолютная, в координатах окна). из позиции мыши вычитаем позицию игрока и получаем локальную позицию мыши (относительно игрока, т.е. прицел будет двигаться вместе с игроком). работает и в 2дэ, и в 3дэ.

→ Ссылка