2010-02-16 5 views
12

2D에서 XNA는 표준 각도 벡터 각도에서 작동합니까?XNA 2D 벡터 각도 - 정확한 계산 방법은 무엇입니까?

오른쪽으로 0도 점, 180도 왼쪽, 270 아래로?

그 VectortoAngle (AngleToVector (PI)) == PI 그래서

float VectortoAngle(Vector2 vec) 

Vector2 AngleToVector(float angle) 

의 '표준'의 구현은 무엇인가?

답변

21

첫 번째 질문에 대한 답변을 보려면 0도 점, 오른쪽 90도 점, 180도 점, 270도 점이 필요합니다. Here은 더 많은 정보를 제공하는 간단한 2D XNA 회전 자습서입니다. 당신은 2D 프로그래밍을 처음 접하는 경우에도

Vector2 AngleToVector(float angle) 
{ 
    return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)); 
} 

float VectorToAngle(Vector2 vector) 
{ 
    return (float)Math.Atan2(vector.Y, vector.X); 
} 

, 당신이 제공하는 Torque X 2D을 조사 할 수 있습니다 : 각도와 뒷면에 벡터를 변환으로

, 나는 몇 가지 좋은 구현 here 발견 이걸 너에게 많이. XNA를 개발하기 위해 돈을 지불했다면 엔진 바이너리를 무료로 얻을 수 있으며, 각도에서 벡터 및 백으로 변환하는 유틸리티 클래스와 이와 같은 유용한 함수가 있습니다.

편집 : Ranieri가 주석에서 지적했듯이, 그 기능은 최대 0도 때 이해가되지 않습니다.

Vector2 AngleToVector(float angle) 
{ 
    return new Vector2((float)Math.Sin(angle), -(float)Math.Cos(angle)); 
} 

float VectorToAngle(Vector2 vector) 
{ 
    return (float)Math.Atan2(vector.X, -vector.Y); 
} 

나는 또한 싶습니다 여기 않는 한 (IS이야 (0, -1), 오른쪽, 0) (1, 0), 다운 (0, 1), 왼쪽은 (-1 나는 Torque를 잠시 사용하고 있었고, 0도를 위로 사용 했으므로 그 부분을 얻었습니다.이 경우, 같은 의미로 화면에 텍스처를 그립니다 파일이. 그래서 아래로 거꾸로 질감을 그리는 것입니다.

+1

문제가 생겼습니다. 당신은 0도 포인트를 올렸지 만, 함수는 (0)을 보았습니다. 이것은 제가 본 대부분의 좌표계에서 0도입니다. – drxzcl

+0

좋은 캐치, 고마워! – Venesectrix

1

당신은 단지 그것을 정의 할 수 있도록 그러나 당신이 좋아하는 특정 각도 XNA에 나타내는 방향에 대해 아무 규칙도 없다.

잘 모르겠어요 게임에서 마지막으로 각도를 사용했을 때 였다. 거의 모든 경우에 벡터로 직접 작업하는 것이 더 쉽습니다.