Другие языки программирования и технологии

Подкиньте идею Как определить направление от Некой точки на экране до курсора мыши

для игры нада чтобы герой поворачивался к направлению курсора мышки.

есть 8 направлений (север. северо-восток, восток, юго-восток, юг итд)
еще есть координаты точки на экране (герой) (допустим 600, 400) и координаты мышки

нужно чтобы взависимости от координат определялось направление

я конечно придумал способ но он мне неочень понравился
уверен что есть способ получше.
Свой вариант небуду приводить
Язык я думаю тоже роли неиграет (пишите на юбом) , главное сама суть
если глубоко не вдаваться в математику
a = mousex - herox;
b = mousey - heroy;
c = sqrt(a*a + b*b);
cosinus = a/c
t = round(cosinus * 2); // округление в сторону ближайшего целого

теперь при mousey >= heroy
if t == 2 восток
if t == 1 юговосток
if t == 0 юг
if t == -1 югозапад
if t == -2 запад
при mousey < heroy
if t == 2 восток
if t == 1 северовосток
if t == 0 север
if t == -1 северозапад
if t == -2 запад

это если начало координат в верхнем левом углу.
иначе (если в нижнем левом) - наоборот
при mousey < heroy
if t == 2 восток
if t == 1 юговосток
if t == 0 юг
if t == -1 югозапад
if t == -2 запад
при mousey >= heroy
if t == 2 восток
if t == 1 северовосток
if t == 0 север
if t == -1 северозапад
if t == -2 запад

не забудьте сделать поправку на случай деления на 0 когда координаты мыши и координаты героя равны
Василий Винюков
Василий Винюков
7 027
Лучший ответ
Нужно за каждую итерацию игрового цикла возвращать куда-либо координаты мышки, ну и работать с ними.
Первое что пришло на ум.
Talant Shamenov
Talant Shamenov
13 245
Не уверен, что всё правильно, но реализовать можно где-то так:
Думаю, что можно воспользоваться полярными координатами.
Новые координаты определяются по формулам:
x = r * cos(alpha)
y = r * sin(alpha)
x, y - коорд. курсора.
r - радиус. В нашем случае расстановите от героя до точки, которое легко определить, как гипотенузу прямоугольного треугольника.

alpha = arccos(x / r) или alpha = arcsin(y / r)
Николай Сары
Николай Сары
4 732
пусть герой будет "стоять" на оси часовой стрелки, а массивы координат экрана соответствуют направлению часовой стрелки (на каждый час по массиву, ну или чаще, в зависимости от необходимой точности)