2012-02-05 2 views
1

Я развиваю игру в виде игры Game Maker (не фактический Game Maker, хотя), потому что мне не удалось в играх с кодированием на реальных языках (можно закодировать обычные приложения, просто не игры) столько раз.Расчет угла наклона от скорости x и y

Во всяком случае, в программе, что я использую функцию направления, оказалось, что время от времени было ошибкой. Однако x и y скорость объекта всегда правильная, поэтому я хотел бы рассчитать угол направления (в градусах) от них. К сожалению, я не гений математики, и я всегда неудачу в тригонометрии; (Можете ли вы мне помочь

Моя игра делает угол IDE систему координат выглядит следующим образом:.?

  270 deg. 
    180 deg.  0 deg. 
     90 deg. 

система позиционирования, как в большинство сред (0,0 в верхнем левом)

ответ

9

Math обычно поставляются с функцией под названием atan2 только для этой цели:.

double angle = atan2(y, x); 

Угол измеряется в радианах; умножить на 180/PI для преобразования в градусы. Диапазон угла от -pi до pi. 0-угол - положительная ось х, а угол растет по часовой стрелке. Незначительные изменения необходимы, если вам нужна другая конфигурация, например, 0-угол является отрицательной осью y и диапазоном от 0 до 359.99 градусов.

Основная причина использования atan2 вместо atan или любой другой функции обратного триггера заключается в том, что он определяет правильный курант угла для вас, и вам не нужна серия if-утверждений.

1

с помощью функции арктангенс это должно быть что-то вроде этого:.

double direction(double x, double y) { 
    if (x > 0) 
     return atan(y/x); 
    if (x < 0) 
     return atan(y/x)+M_PI; 
    if (y > 0) 
     return M_PI/2; 
    if (y < 0) 
     return -M_PI/2; 
    return 0; // no direction 
} 

(где х и у является горизонтальной и вертикальной скорости , M_PI пи и Atan является функцией арктангенс) библиотеки

0

В игре производитель специально вы можете использовать следующие:

direction = point_direction(x, y, x+x_speed, y+y_speed) 
speed = point_distance(x, y, x+x_speed, y+y_speed) 

(сравните текущие и будущие X/Y координаты и возвращаемые значения)

Обратный процесс, чтобы получить х/y_speed:

x_speed = lengthdir_x(speed, direction) 
y_speed = lengthdir_y(speed, direction) 

Note: Added this post because its still viewed in relation to Game Maker: 
Studio and its specific functions. Maybe it has no value for the person who 
asked originally but i hope it will help some Game Maker users who wander here. 
Смежные вопросы