Implémente une structure représentant un angle.
L'angle est stocké en mémoire dans l'unité de mesure d'angle pour laquelle il a été initialement défini, avec une double précision, permettant un contrôle fin des conversions et réduisant les erreurs d'arrondi. Toutes les opérations sont fortement typées.
Comprend les opérations d'angle telles que lerp, la réduction, l'angle de référence, la comparaison, la classification et la trigonométrie.
NetFabric.Angle est disponible sous forme de package NuGet et de package Unity.
Utilisez les méthodes correspondant aux unités de mesure avec lesquelles vous travaillez :
var right0 = Angle . FromRadian ( Math . PI / 2.0 ) ;
var right1 = Angle . FromDegrees ( 90.0 ) ;
var right3 = Angle . FromGradian ( 100.0 ) ;
Lors de l'utilisation du format DMS, les minutes d'arc et les secondes d'arc doivent être des valeurs comprises dans l'intervalle [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
Vous pouvez utiliser les angles prédéfinis dans n'importe quelle unité de mesure :
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
Utilisez les méthodes static
pour convertir n'importe quel angle :
var radians = Angle . ToRadians ( angle ) ;
Les angles sont fortement typés afin qu'il sache à partir de quelle unité de mesure la conversion est effectuée.
Remarque : Si nécessaire, les résultats doivent être explicitement réduits.
Utilisez la propriété nommée d'après l'unité de mesure (pour être explicite) :
var radians = angleRadians . Radians ;
var degrees = angleDegrees . Degrees ;
var gradians = angleGradians . Gradians ;
Un angle en degrés peut être déconstruit en notation DMS. Cela peut être fait en utilisant l'un ou l' autre des arguments :
int degrees0 ;
double minute0 ;
angleDegrees . Deconstruct ( out degrees0 , out minutes0 ) ;
int degrees1 ;
int minute1 ;
double seconds1 ;
angleDegrees . Deconstruct ( out degrees1 , out minutes1 , out seconds1 ) ;
arguments avec la syntaxe C# 7 :
angleDegrees . Deconstruct ( out var degrees0 , out var minutes0 ) ;
angleDegrees . Deconstruct ( out var degrees1 , out var minutes1 , out var seconds1 ) ;
ou en utilisant les déconstructeurs C# 7 :
var ( degrees0 , minutes0 ) = angleDegrees ;
var ( degrees1 , minutes1 , seconds1 ) = angleDegrees ;
L'angle peut être réduit à un angle coterminal compris dans la plage [0,0, 360,0[ degrés :
var angle = Angle . Reduce ( AngleDegrees . Right + AngleDegrees . Full ) ; // result is AngleDegrees.Right
Obtenir l'angle de référence (le plus petit angle avec l'axe des x) :
var angle = Angle . GetReference ( AngleDegrees . Right + AngleDegrees . FromDegrees ( 45.0 ) ) ; // result is an angle with 45 degrees
Des opérateurs mathématiques sont définis permettant des calculs avec des angles.
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 ;
Remarque : Si nécessaire, les résultats doivent être explicitement réduits.
Des méthodes équivalentes sont également définies afin de pouvoir être utilisées pour les langages qui ne prennent pas en charge les opérateurs.
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 ) ;
Les opérateurs de comparaison peuvent être utilisés pour comparer deux angles :
if ( angle0 > angle1 || angle0 == angle2 ) {
.. .
}
Pour les langages qui ne prennent pas en charge les opérateurs, utilisez la méthode statique Compare() :
if ( Angle . Compare ( angle0 , angle1 ) <= 0 ) { // less or equal to
.. .
}
Pour des raisons de performances, les valeurs comparées ne sont pas réduites. Si nécessaire, ils doivent être explicitement réduits :
if ( Angle . Reduce ( angle0 ) > Angle . Reduce ( angle1 ) ) {
.. .
}
ou utilisez la méthode statique CompareReduced() :
if ( Angle . CompareReduced ( angle0 , angle1 ) > 0 ) {
.. .
}
Les opérations trigonométriques habituelles (sin, cos, tan, asin, acos, atan, sinh et cosh) sont disponibles en méthodes statiques mais uniquement pour les angles en radians :
double value0 = Angle . Sin ( angleRadians ) ;
AngleRadians angle0 = Angle . Asin ( value0 ) ;
Les angles qui ne sont pas en radians doivent être convertis :
double value1 = Angle . Sin ( Angle . ToRadians ( angleDegrees ) ) ;
AngleDegrees angle1 = Angle . ToDegrees ( Angle . Asin ( value1 ) ) ;
Vous pouvez obtenir le quadrant de l'angle
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
et peut vérifier si un angle est aigu, droit, obtus, droit ou réflexe :
var isAcute = Angle . IsAcute ( AngleDegrees . Right ) ; // false
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( 45.0 ) ) ; // true
var isRight = Angle . IsRight ( AngleDegrees . Right ) ; // true
La classification considère l'équivalent positif réduit de l'angle ainsi :
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