문제
나는 당신에게 다소 간단한 질문이 있습니다. 나는 오래 전에 답을 찾아야한다고 생각하지만 어떻게 든이 사소한 문제에 머리를 감싸지 못합니다.
벡터 v = (x, y)가 주어지면 '일반적인'방향이라는 것을 알고 싶습니다. 그것은 'up', 'down', 'left'또는 'right'입니다.
벡터의 방향이 45 ~ 135 도인 경우 벡터의 일반 방향은 'UP'입니다. '왼쪽'은 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) 인 척하는 척하십시오.
해결책
실제로 방법이 있습니다. 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 각도는 항상 왼쪽 또는 오른쪽으로갑니다.