我有一個cathesian二維繫統中的兩個點,都給了我一個向量的起點和終點。現在我需要新矢量和x軸之間的角度。我知道gradient =(y2-y1)/(x2-x1),我知道angle = arctan(gradient)。從x軸向量計算角度(梯度)
但我不知道這是否適用於每個案件(方向)載體需要。 我什麼時候需要添加180度或類似的東西。
任何人都可以爲我提供一些c/java代碼或所有情況下的提示。
THX和問候
我有一個cathesian二維繫統中的兩個點,都給了我一個向量的起點和終點。現在我需要新矢量和x軸之間的角度。我知道gradient =(y2-y1)/(x2-x1),我知道angle = arctan(gradient)。從x軸向量計算角度(梯度)
但我不知道這是否適用於每個案件(方向)載體需要。 我什麼時候需要添加180度或類似的東西。
任何人都可以爲我提供一些c/java代碼或所有情況下的提示。
THX和問候
你可以使用點積(http://en.wikipedia.org/wiki/Dot_product),但簡化了這一切,你最終只是把你的矢量的終點的反正就可以獲得它和之間的夾角x軸。 Atan函數通常以[-pi,pi]或[-180,180]的順序返回,所以如果你想確保它正確包裝,你需要檢查你的向量的y分量是否爲負值。在C中,可以使用atan2而不是atan,並使用每個組件的符號來計算角度的符號(http://www.cplusplus.com/reference/clibrary/cmath/atan2/)。例如,如果您具有矢量點start = < 1,2>和end = < -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
Long故事短 - 你想atan2。 – rutgersmike 2012-03-21 20:14:30
所以總結一下,當你有一個二維的XY載體,需要找到一個0 \ 360度到正x軸你這樣做:
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;
「任何人都可以爲我提供一些類似c/java的代碼」不是一個問題。向我們展示一些代碼,描述您的困難,我們將幫助您改進它。 – abelenky 2012-03-21 20:02:52
[查找兩點之間的角度,相對於水平軸?]可能的重複(http://stackoverflow.com/questions/7829010/find-angle-between-two-points-respective-to-horizontal-axis) – 2012-03-21 20:07:21