2012-03-21 2 views
2

cathesian 2D 시스템에서 두 점을가집니다. 두 점 모두 벡터의 시작점과 끝점을 제공합니다. 이제 새로운 벡터와 x 축 사이의 각도가 필요합니다.x 축이있는 벡터에서 각도 (그래디언트) 계산

나는 그라디언트 = (y2-y1)/(x2-x1)을 알고 그 각도 = arctan (그라데이션)을 알고 있습니다.

그러나 모든 경우 (방향) 벡터가 걸리는 경우이 작동하는지 잘 모르겠다. 언제 180도를 추가해야합니까?

누구나 나에게 코드 또는 힌트와 같은 일부 C/java를 제공 할 수 있습니다.

들으와 안부

+1

"누군가 코드/자바 같은 코드를 제공 할 수 있습니까?"라는 질문은 아닙니다. 우리에게 몇 가지 코드를 보여주고, 당신의 어려움을 설명하십시오. – abelenky

+0

[가로축에 대한 두 점 사이의 각도 찾기?] (http://stackoverflow.com/questions/7829010/find-angle-between-two-points-respective-to-horizontal-axis) –

답변

6

당신은, 당신은 그냥 사이의 각도를 얻을 수 있도록 벡터의 엔드 포인트의 아크 탄젠트를 복용 결국 내적 (http://en.wikipedia.org/wiki/Dot_product)하지만 모두 밖으로 단순화를 사용할 수 x 축 . Atan 함수는 대개 [-pi, pi] 또는 [-180,180] 순서로 반환되므로 올바르게 래핑되었는지 확인하려면 벡터의 y- 구성 요소가 음수인지 확인해야합니다 . C에서는 atan 대신 atan2를 사용할 수 있으며 각 구성 요소의 부호를 사용하여 각도 (http://www.cplusplus.com/reference/clibrary/cmath/atan2/)의 부호를 파악합니다.

예를 들어, 벡터 점 시작 = < 1,2> 및 끝 = < -5, -5>가있는 경우 시작 부분을 빼서 ​​원점으로 다시 조정하면 < -6 , -7>. 그래서 당신은 그 시점을보고 있습니다. x 축과의 각도는 atan2 (y, x), atan2 (-7, -6)이며 -130.6입니다.

double x = -6; 
double y = -7; 

fprintf(stderr,"angle is %.2f\n",atan2(y,x)*180/3.14159); 

각도는 -130.60

+3

Long 짧은 이야기 - 당신 atan2 싶어요. – rutgersmike

0

는 2 차원 XY 벡터를 가지고 당신이 할 양의 X 축에 0 360 \도 찾을 필요가 그래서, 요약 :

const float RAD2DEG = 180.0f/3.14159f; 

float x = -4.0f; 
float y = 3.2f; 

// atan2 receives first Y second X 
double angle = atan2(y, x) * RAD2DEG; 
if (angle < 0) angle += 360.0f; 
관련 문제