2009-06-19 4 views
2

의 일반적인 방향을 .. 을 결정하지만, 어떻게 든이 사소한 문제를 해결 내 머리를 정리하고 수 없습니다.내가 오래 전에 답을 발견해야 같은 느낌 내가 당신을 위해 오히려 간단한 질문이 2 차원 벡터

벡터 v = (X, Y)에, 나는 그것의 '일반'방향을 알고 싶습니다 감안할. 즉 '아래', '왼쪽'또는 '오른쪽'

벡터의 일반 오리엔테이션은 어느 '위로'는 '위로'는 벡터의 방향은 45과 135도 사이 인 경우. '왼쪽'은 135도에서 225도 사이입니다. '아래'는 225도에서 315도 사이입니다. '오른쪽'은 315도에서 45도 사이입니다.

정말 각도가 정확히 45도, 135도, 225도 또는 315도 인 경우에 상관하지 않습니다.

캐치는 삼각법을 사용하고 싶지 않습니다. 나는 간단한 해결책이 있다는 것을 확신한다.

솔루션이 전체 서클을 8 개로 나눌 수 있다고 생각합니다. 여기 내가 지금까지 가지고있는 것이있다.

if(x > 0 && y > x) 
    return Up 
if(x > 0 && y > 0 && y < x) 
    return Right 

... etc ... 

기본적으로 해결책을 찾을 수 있습니다. 나는이 문제에 대한 당신 자신의 접근에 더 관심이있다.

감사합니다.

편집 : 사용 된 벡터는 정규화되지 않습니다. 한 쌍의 점을 사용하여 벡터를 나타낼 수 있습니다. 간단히 벡터의 원점은 (0,0)입니다.

+0

좋아, 나는 혼란 스러울 지 모르지만 어떻게 벡터를 x와 y로 표현하고, x와 y를 둘 다 위치가있는 것처럼 비교합니까? 하나는 방향으로, 다른 하나는 크기로해서는 안됩니까? –

+1

@Michael : 벡터를 나타내는 데는 두 가지 방법이 있습니다. 방향과 크기 (직각 삼각형의 빗변과 같은)를 가질 수 있습니다. 다른 방법은 오른쪽 삼각형의 다리와 같은 x 및 y 구성 요소를 사용하는 것입니다. OP가 삼각법을 피하려고 시도하기 때문에 x/y 접근법이 더 적합 해 보입니다. –

+0

@Micheal : http://en.wikipedia.org/wiki/Unit_vector 참조 – Randolpho

답변

7

실제로 방법이 있습니다. 실현해야 할 것은 abs (y)> abs (x) 인 경우 방향이 수직이고 그렇지 않으면 방향이 수평이라는 것입니다. 수직 인 경우 y의 부호는 위/아래를 표시하고 그렇지 않은 경우 x의 부호는 왼쪽/오른쪽을 나타냅니다. 따라서 :

if (abs(y) > abs(x)) { 
    if (y > 0) up else down 
} else { 
    if (x > 0) right else left 
} 

45ish 각도는 항상 왼쪽이나 오른쪽으로 갈 것입니다.

+0

이것은 정확히 내가 필요로하는 것처럼 들린다. 고마워요 :) – GuiSim

+1

글쎄, 대답을 수락하십시오. ;-) –

+0

답변을 수락하는 경우 +10 담당자에게만 제공됩니다. 투표 한 것처럼 +10을받습니다. 따라서 수집 뱃지를 제외하고는 답변 틱보다 투표를 실제로 원합니다. –

0

나는 당신이 삼각을 피하기 위해 원한다고 알고 있지만 혹시 atan2 기능을 사용 했는가? 당신의 접근 방식이 자리에서, 당신은 일을 할 나타나는 : ( 당신의 벡터 unit vectors으로 구성된다하는 의미 편집)를 정규화 된 벡터 공간을 가정

double ldAngle = atan2(vector.y, vector.x) * 180/PI; 
+0

예, 알고 있습니다. 그러나 질문이 진술 한대로, 나는 trig를 사용하고 싶지 않다. 나는 정확한 각도, 일반적인 방향을 알 필요가 없으므로 단순히 다른 접근 방식을 시도하고 있습니다. – GuiSim

0

: 그것은 벡터의 각도를 결정하기 위해 사용하는 것이 매우 쉽다 그리고 2D 게임과 애니메이션을 위해 가장 자주 사용되는 것. 그러나 진실을 증명할 수는 있습니다.

@ Daniel의 접근 방식은 더욱 세련된 IMO입니다.

+0

접근법은 모든 벡터에서 작동해야합니다. 벡터가 정규화되지 않았습니다. – GuiSim

+0

죄송합니다. 편집했으며 편집을 읽었습니다. 나는 벡터가 정규화되었다는 것을 의미하지는 않았지만 (길이가 1 임) 단위 벡터, 즉 정규화 된 벡터 공간으로 구성되었다. 바로 당신이하는 일입니다. 우리는 다른 용어로도 똑같이 말하고 있습니다. :) – Randolpho

관련 문제