Implementiert eine Struktur, die einen Winkel darstellt.
Der Winkel wird in der Winkelmesseinheit, in der er ursprünglich definiert wurde, mit doppelter Genauigkeit im Speicher gespeichert, was eine genaue Steuerung der Umrechnungen ermöglicht und Rundungsfehler reduziert. Alle Operationen sind stark typisiert.
Beinhaltet Winkeloperationen wie Lerp, Reduktion, Referenzwinkel, Vergleich, Klassifizierung und Trigonometrie.
NetFabric.Angle ist als NuGet-Paket und als Unity-Paket verfügbar.
Verwenden Sie die Methoden für die Maßeinheiten, mit denen Sie arbeiten:
var right0 = Angle . FromRadian ( Math . PI / 2.0 ) ;
var right1 = Angle . FromDegrees ( 90.0 ) ;
var right3 = Angle . FromGradian ( 100.0 ) ;
Bei Verwendung des DMS-Formats müssen Bogenminuten und Bogensekunden Werte im Intervall [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
Sie können die vordefinierten Winkel in jeder beliebigen Maßeinheit verwenden:
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
Verwenden Sie die static
Methoden, um beliebige Winkel umzurechnen:
var radians = Angle . ToRadians ( angle ) ;
Winkel sind stark typisiert, sodass die Maßeinheit weiß, von welcher Maßeinheit umgerechnet wird.
Hinweis: Bei Bedarf müssen die Ergebnisse explizit reduziert werden.
Verwenden Sie die Eigenschaft, die nach der Maßeinheit benannt ist (um es explizit zu sagen):
var radians = angleRadians . Radians ;
var degrees = angleDegrees . Degrees ;
var gradians = angleGradians . Gradians ;
Ein Winkel in Grad kann in die DMS-Notation zerlegt werden. Dies kann mit einem der beiden Out -Argumente erfolgen:
int degrees0 ;
double minute0 ;
angleDegrees . Deconstruct ( out degrees0 , out minutes0 ) ;
int degrees1 ;
int minute1 ;
double seconds1 ;
angleDegrees . Deconstruct ( out degrees1 , out minutes1 , out seconds1 ) ;
Argumente mit C# 7-Syntax ausgeben :
angleDegrees . Deconstruct ( out var degrees0 , out var minutes0 ) ;
angleDegrees . Deconstruct ( out var degrees1 , out var minutes1 , out var seconds1 ) ;
oder mit C# 7-Dekonstruktoren:
var ( degrees0 , minutes0 ) = angleDegrees ;
var ( degrees1 , minutes1 , seconds1 ) = angleDegrees ;
Der Winkel kann auf einen koterminalen Winkel im Bereich [0,0, 360,0[ Grad: reduziert werden
var angle = Angle . Reduce ( AngleDegrees . Right + AngleDegrees . Full ) ; // result is AngleDegrees.Right
Ermitteln des Referenzwinkels (der kleinste Winkel mit der x-Achse):
var angle = Angle . GetReference ( AngleDegrees . Right + AngleDegrees . FromDegrees ( 45.0 ) ) ; // result is an angle with 45 degrees
Es werden mathematische Operatoren definiert, die Berechnungen mit Winkeln ermöglichen.
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 ;
Hinweis: Bei Bedarf müssen die Ergebnisse explizit reduziert werden.
Es werden auch äquivalente Methoden definiert, sodass sie für Sprachen verwendet werden können, die keine Operatoren unterstützen.
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 ) ;
Vergleichsoperatoren können verwendet werden, um zwei Winkel zu vergleichen:
if ( angle0 > angle1 || angle0 == angle2 ) {
.. .
}
Für Sprachen, die keine Operatoren unterstützen, verwenden Sie die statische Compare()-Methode:
if ( Angle . Compare ( angle0 , angle1 ) <= 0 ) { // less or equal to
.. .
}
Aus Performancegründen werden die verglichenen Werte nicht reduziert. Bei Bedarf müssen sie explizit reduziert werden:
if ( Angle . Reduce ( angle0 ) > Angle . Reduce ( angle1 ) ) {
.. .
}
oder verwenden Sie die statische CompareReduced()-Methode:
if ( Angle . CompareReduced ( angle0 , angle1 ) > 0 ) {
.. .
}
Die üblichen trigonometrischen Operationen (sin, cos, tan, asin, acos, atan, sinh und cosh) stehen als statische Methoden zur Verfügung, jedoch nur für Winkel im Bogenmaß:
double value0 = Angle . Sin ( angleRadians ) ;
AngleRadians angle0 = Angle . Asin ( value0 ) ;
Winkel, die nicht im Bogenmaß angegeben sind, müssen umgerechnet werden:
double value1 = Angle . Sin ( Angle . ToRadians ( angleDegrees ) ) ;
AngleDegrees angle1 = Angle . ToDegrees ( Angle . Asin ( value1 ) ) ;
Sie können den Quadranten des Winkels erhalten
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
und kann prüfen, ob ein Winkel spitz, recht, stumpf, gerade oder reflexartig ist:
var isAcute = Angle . IsAcute ( AngleDegrees . Right ) ; // false
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( 45.0 ) ) ; // true
var isRight = Angle . IsRight ( AngleDegrees . Right ) ; // true
Bei der Klassifizierung wird das reduzierte positive Äquivalent des Winkels wie folgt berücksichtigt:
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