2014年1月22日 星期三

Halcon 運算方法 angle_lx( : : Row1, Column1, Row2, Column2 : Angle)

angle_lx

功用 : 計算線段與水平軸的角度。

運算說明 [1]

angle_lx (Operator)

Name : angle_lx — Calculate the angle between one line and the horizontal axis.

Signature : angle_lx( : : Row1, Column1, Row2, Column2 : Angle) 

The parameter Angle returns the angle in radians, ranging from -pi <= Angle <= pi. 

這裡要特別說明的是角度 (Angle) 的值。 angle_lx 操作會返回 angel 的值,這裡的 angle 是弧度又稱弳度 (radians )。

我們由 wiki 查詢弧度,可以看到以下的說明[2] :

一個完整的圓的弧度是2π,
所以 2π rad = 360°,
1 π rad = 180°,
**************************
1°=π/180 rad,
1 rad = 180°/π(約57.29577951°)。
******************************

以度數表示的角度,把數字乘以π/180便轉換成弧度;以弧度表示的角度,乘以180/π便轉換成度數。

但是,在 Halcon 中, angle 的值域為 -pi <= angel <= pi. 所以,在作計算的時候要特別留意。

驗證

Halcon 範例 angle_lx.hdev, 我們驗證 angle_lx 操作所返回的值,發現

若以起始點依順時針方向畫一直線,計算該直線與水平軸的夾角,我們會得到負值的 angel。

依逆時針方向畫一直線,計算該直線與水平軸的夾角,我們會得到正值的 angel。

另外,觀察線段與水平軸平行時,運算式 angle_lx(Row1, column1, Row2, Column2, Angle) 的關係,得到

  1. Angle = 0 時,

    Column1 < Column2,Row1 = Row2,也就是 0 度

  2. 0 < Angle < pi 時,在第 1, 2 象限

    Column1 < Column2,Row1 > Row2, 第 1 象限

    Column1 = Column2,Row1 > Row2, 第 1,2 象限重壘處,也就是 90 度

    Column1 > Column2,Row1 <= Row2, 第 2 象限

  3. -pi <= Angle < 0 時,在第 3, 4 象限

    Column1 <= Column2,Row1 < Row2, 第 4 象限

    Column1 = Column2,Row1 < Row2, 第 3,4 象限重壘處,也就是 270 度

    Column1 > Column2,Row1 <= Row2, 第 3 象限,包含 180度

問題

180 度時,其 angle 應該是 pi 亦或是 -pi 呢?

我認為應該是 pi, 但是就範例的結果,其值為 -pi。

Referenes

[1] Halcon Reference Manual/ Version 10.0

[2] Wiki-弧度

沒有留言:

張貼留言