簡體   English   中英

負 y 軸和矢量之間的歸一化角度

[英]Normalising angle between negative y-axis and vector

在此處輸入圖像描述

從圖片:我要計算alpha,定義為連接兩點的線與y軸之間的角度,在圖像中可以看到的方向上,范圍為0到180,范圍為0到180相反-180(從當前起點指向 finger1 的箭頭)。

(atan2((x1 - x), (y - y1)) * 180/ M_PI );

我設法用這個公式做到了這一點,簡單地反轉了 atan2 function 中的 x 和 y 引用,但這僅在第一個點 (x,y) 相對於第二個點位於“右下角”時才有效。 在那種情況下,我得到了確切的預期結果。 在所有其他人中,顯然我得到了錯誤的價值觀。 我怎樣才能將其標准化以始終獲得相同的值?

定義:

  • 我們有兩個點 P1 和 P2 (Finger1, Finger2)
  • 我們引入一個向量 v:P2 - P1

計算 v 的斜率 m:

m = v.y / v.x;
  • 如果 m < 0:斜率從左上角到右下角減小
  • 如果 m > 0:斜率從左下角到右上角增加
  • 如果 m == 0:常量
  • 如果 vx == 0:m 未定義

由於倒向量 v (-v) 的斜率值相同(符號不同),因此我們可以使用 m 的絕對值。

正 x 軸與向量 v 之間的角度 θ:

theta = atan(abs(m));

角度 α 為:

alpha = M_PI_2 - theta;

這基本上就是atan2所做的,但atan2為您提供了 [-π, π] 范圍內的值。 通過上面的代碼,我們得到了 [0, π / 2] 范圍內的值。

y 軸是從上到下還是從上到下顯示在屏幕上並不重要。 數學是一樣的。 但這意味着,您在同一系統中收到 P1 和 P2。 如果不是,則必須鏡像 x 軸上的點,這會改變點的 y 坐標的符號。

詳細版本:

alpha = M_PI_2 - (atan(abs((P2.y - P1.y) / (P2.x - P1.x)))); //radians

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM