2017-12-20 24 views
0

나는 2 차원 게임을 가지고있다. 각 플레이어의 위치는 (x, y)이고 제목은 오른쪽 (0deg, 최대 90deg 등)입니다. Player1을 Player2로 향하게 설정하는 방법이 필요합니다. 기울기를 계산하여 계산하려고 시도했습니다. -2D 게임, 플레이어 1을 플레이어 2로 바꿈

slope = (player2.y - player1.y)/(player2.x - player1.x) 
heading = degrees(atan(slope)) 

그러나 매번 올바른 결과를 반환하지 않습니다. 다른 접근법을 추천 해 주시겠습니까?

+2

'math.atan2()'를 보라. – Alfe

답변

1

atan(slope)은 모든 방향에 대해 올바른 값을 제공 할 수 없다는 사실로 인해 어려움을 겪고 있습니다. 기울기가 방향을 포함하지 않기 때문입니다. 180 ° 회전하면 기울기가 변경되지 않습니다. 수학적으로, 이것은 -y/-x = y/x라는 사실로부터 파생됩니다.

당신이 이것을 처음으로 발견 한 것은 아닙니다. 상황에 대한 전통적인 해결책은 항상 x와 y 값의 부호를 면밀히 살펴본 다음 atan()의 결과가 어느 사분면에 위치해야하는지 결정하는 것이 었습니다.

요즘 영감을 얻지 못하는 이름이 atan2() 인 함수에서 수행됩니다. 이 값은 두 개의 값 (y와 x)을받으며 범위 (-180 °, + 180 °)에서 올바른 방향 각을 찾기 위해 필요한 모든 값을 라디안으로 주어서 범위 (-pi, + pi ].