2012-02-05 5 views
1

실제 게임 메이커 코딩에 실패했기 때문에 Game Maker 프로그램 (실제 Game Maker가 아님)으로 게임을 개발 중입니다. 게임) 여러 번.x 및 y 속도에서 방향 각도 계산하기

어쨌든, 방향 기능을 사용하고있는 프로그램에서는 때때로 버그가있는 것으로 판명되었습니다. 그러나 객체의 x와 y 속도는 항상 정확하므로 방향 각도 (도)를 계산하고 싶습니다. 불행하게도 나는 수학 천재 아니에요 그리고 난 항상 삼각법에 실패하고 있습니다 (당신이 나를 도와 줄 수

다음과 같이 IDE의 각도 좌표 시스템을 만들어 내 게임은 다음과 같습니다.?

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

위치 시스템에서처럼 대부분의 환경

답변

9

수학 라이브러리는 대개이 목적을 위해 atan2라는 기능을 제공 :.

double angle = atan2(y, x); 

각도는 라디안으로 측정; 180/PI를 곱하여 도수로 변환하십시오. 각도의 범위는 -pi에서 pi까지입니다. 0 각도는 양의 x 축이고 각도는 시계 방향으로 커집니다. 0- 각도가 음수 y- 축이고 범위가 0-359.99 도인 것과 같이 다른 구성을 원한다면 사소한 변경이 필요합니다.

atan 또는 다른 역 삼각 함수 대신 atan2을 사용하는 가장 큰 이유는 올바른 각도의 각도를 찾아 내고 일련의 if 문을 필요로하지 않기 때문입니다. 게임 메이커

1

사용하여 아크 탄젠트 함수 (-왼쪽에서 0,0) 그 결과는 아래와 같습니다 :.

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 
} 

(x와 y는 수평 및 수직 속도는 어디 , 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 좌표를 반환) 얻을 수있는 과정을 역 X/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. 
관련 문제