NetFabric.Angle
Net
實作一個表示角度的結構。
角度以最初定義的角度測量單位儲存在記憶體中,具有雙精度,允許對轉換進行精細控制並減少舍入誤差。所有操作都是強類型的。
包括角度運算,如勒普、歸約、參考角、比較、分類和三角學。
NetFabric.Angle 可作為 NuGet 套件和 Unity 套件使用。
使用適用於您正在使用的測量單位的方法:
var right0 = Angle . FromRadian ( Math . PI / 2.0 ) ;
var right1 = Angle . FromDegrees ( 90.0 ) ;
var right3 = Angle . FromGradian ( 100.0 ) ;
使用 DMS 格式時,弧分和弧秒必須是區間 [0.0, 60.0[
var right3 = Angle . FromDegrees ( 90 , 59.9 ) ; // degrees and arcminutes
var right4 = Angle . FromDegrees ( - 90 , 59 , 59.9 ) ; // degrees, arcminutes and arcseconds
您可以使用任何測量單位的預先定義角度:
var zero = AngleDegrees . Zero ; // 0 degrees
var right = AngleDegrees . Right ; // 90 degrees
var straight = AngleDegrees . Straight ; // 180 degrees
var full = AngleDegrees . Full ; // 360 degrees
var zero = AngleRadians . Zero ; // 0 radians
var right = AngleRadians . Right ; // PI/2 radians
var straight = AngleRadians . Straight ; // PI radians
var full = AngleRadians . Full ; // 2 * PI radians
使用static
方法轉換任意角度:
var radians = Angle . ToRadians ( angle ) ;
角度是強類型的,因此它知道從什麼測量單位轉換而來。
注意:如果需要,必須明確減少結果。
使用以測量單位命名的屬性(明確地說):
var radians = angleRadians . Radians ;
var degrees = angleDegrees . Degrees ;
var gradians = angleGradians . Gradians ;
以度為單位的角度可以解構為 DMS 表示法。這可以使用out參數來完成:
int degrees0 ;
double minute0 ;
angleDegrees . Deconstruct ( out degrees0 , out minutes0 ) ;
int degrees1 ;
int minute1 ;
double seconds1 ;
angleDegrees . Deconstruct ( out degrees1 , out minutes1 , out seconds1 ) ;
使用 C# 7 語法輸出參數:
angleDegrees . Deconstruct ( out var degrees0 , out var minutes0 ) ;
angleDegrees . Deconstruct ( out var degrees1 , out var minutes1 , out var seconds1 ) ;
或使用 C# 7 解構函數:
var ( degrees0 , minutes0 ) = angleDegrees ;
var ( degrees1 , minutes1 , seconds1 ) = angleDegrees ;
此角度可以減少到範圍為 [0.0, 360.0[ 度:
var angle = Angle . Reduce ( AngleDegrees . Right + AngleDegrees . Full ) ; // result is AngleDegrees.Right
取得參考角度(與x軸的最小角度):
var angle = Angle . GetReference ( AngleDegrees . Right + AngleDegrees . FromDegrees ( 45.0 ) ) ; // result is an angle with 45 degrees
數學運算子的定義允許使用角度進行計算。 號
var angle0 = - AngleDegrees . Right ;
var angle1 = AngleDegrees . Straight + Angle . FromDegrees ( 45.0 ) ;
var angle2 = 2.0 * Angle . FromDegrees ( 30.0 ) ;
var angle3 = Angle . FromDegrees ( 30.0 ) / 2.0 ;
注意:如果需要,必須明確減少結果。
也定義了等效方法,以便它們可以用於不支援運算符的語言。
var angle0 = Angle . Negate ( AngleDegrees . Right ) ;
var angle1 = Angle . Add ( AngleDegrees . Straight , Angle . FromDegrees ( 45.0 ) ) ;
var angle2 = Angle . Multiply ( 2.0 , Angle . FromDegrees ( 30.0 ) ) ;
var angle3 = Angle . Divide ( Angle . FromDegrees ( 30.0 ) , 2.0 ) ;
比較運算子可用於比較兩個角度:
if ( angle0 > angle1 || angle0 == angle2 ) {
.. .
}
對於不支援運算符的語言,請使用靜態 Compare() 方法:
if ( Angle . Compare ( angle0 , angle1 ) <= 0 ) { // less or equal to
.. .
}
出於效能原因,比較的值不會減少。如果需要,必須明確減少它們:
if ( Angle . Reduce ( angle0 ) > Angle . Reduce ( angle1 ) ) {
.. .
}
或使用靜態 CompareReduced() 方法:
if ( Angle . CompareReduced ( angle0 , angle1 ) > 0 ) {
.. .
}
常用的三角運算(sin、cos、tan、asin、acos、atan、sinh 和 cosh)可用作靜態方法,但僅適用於以弧度表示的角度:
double value0 = Angle . Sin ( angleRadians ) ;
AngleRadians angle0 = Angle . Asin ( value0 ) ;
必須轉換非弧度的角度:
double value1 = Angle . Sin ( Angle . ToRadians ( angleDegrees ) ) ;
AngleDegrees angle1 = Angle . ToDegrees ( Angle . Asin ( value1 ) ) ;
你可以得到角度的象限
var quad0 = Angle . GetQuadrant ( Angle . FromDegrees ( 45.0 ) ) ; // Angle.Quadrant.First
var quad1 = Angle . GetQuadrant ( Angle . FromDegrees ( 220.0 ) ) ; // Angle.Quadrant.Third
var quad2 = Angle . GetQuadrant ( Angle . FromDegrees ( - 45.0 ) ) ; // Angle.Quadrant.Fourth
並且可以檢查一個角是銳角、直角、鈍角、直角還是反射角:
var isAcute = Angle . IsAcute ( AngleDegrees . Right ) ; // false
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( 45.0 ) ) ; // true
var isRight = Angle . IsRight ( AngleDegrees . Right ) ; // true
分類考慮角度的減少的正當量,因此:
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( 45.0 ) ) ; // true
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( - 45.0 ) ) ; // true
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( 315.0 ) ) ; // false