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