2017-05-12 13 views
-1

2 차원 공간에서 위치 및 회전을 가져 오는 객체가 있습니다.주어진 회전 및 필요한 거리로 새 위치 결정

X 및 Y 위치를 변경하는 유일한 방법으로 회전되는 동일한 방향으로 X와 Y 사이에서 총 12 미터의 물체 위치를 전진시켜야합니다.

이것은 내가 시도하고 실패한 것의 (나쁜) 예입니다.

if (direction <= 45) 
{ 
    float nx = Convert.ToSingle(direction * .13333333); 
    float ny = 12 - nx; 
} else if (direction <= 90) 
{ 
    float ny = Convert.ToSingle((90 - direction) * .133333333); 
    float nx = 12 - ny; 
} else if (direction <= 135) 
{ 
    float ny = Convert.ToSingle((135 - direction) * -.133333333); 
    float nx = -12 - ny; 
} else if (direction <= 180) 
{ 
    float nx = Convert.ToSingle((180 - direction) * -.133333333); 
    float ny = -12 - nx; 
} 

원하는 결과를 얻기 위해 올바른 공식 또는 방법을 사용하고 있습니까? 나는 Cos와 Tan이 필요하다고 믿을만한 이유가 있지만, 언제 어떻게 사용해야하는지 생각하고있다.

+1

나는 조금 (2D) 벡터 수학의 기초에 보일 것 같아요. Google은이 점에서 리소스를 찾는 데 정말로 탁월합니다. – elgonzo

+0

sinus와 cosinus가있는 벡터를 만드는 경우 조건을 모두 피할 수 있습니다. 거리는 'x = distance * cos (angle)'와'y = 거리 * 죄 (각도)'를 비교합니다. tangens는 요구되어서는 안된다. 각도는 라디안으로 지정해야합니다 (전체 원 = 2 * Pi). – dlatikay

답변

2

당신은 벡터를 삼각형으로 생각하고 그것을 풀어야합니다. 대답은 너무 복잡하지 않습니다. https://www.mathsisfun.com/algebra/trig-finding-side-right-triangle.html

//convert degrees into radians for the .NET trig functions 
    direction *= Math.PI/180; 

    float nx = (float)(12 * Math.Cos(direction)); 
    float ny = (float)(12 * Math.Sin(direction));