// Attention : ce fichier a été automatiquement généré par un // template T4. Toute modification manuelle sera écrasée !!! using System; using System.Text.RegularExpressions; namespace Developpez.Dotnet.Measures { /// /// Représente une mesure d'angle /// public interface IAngle { /// /// Obtient la valeur de cet angle en radians /// double ValueInRadians { get; } } /// /// Représente un angle en radians /// public struct Radian : IAngle, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cet angle en radians public Radian(double value) { _value = value; } /// /// Obtient la valeur ce cet angle. /// /// /// La valeur de cet angle /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en radians. /// /// Résultat de la conversion. /// public static implicit operator Radian(double value) { return new Radian(value); } /// /// Effectue une conversion explicite de vers . /// /// Angle /// /// Résultat de la conversion. /// public static explicit operator double(Radian angle) { return angle.Value; } /// /// Teste l'égalité de deux angles. /// /// Premier angle /// Deuxième angle /// /// true si les deux angles sont égaux, false sinon. /// public static bool operator ==(Radian a, Radian b) { return a.Equals(b); } /// /// Teste la non-égalité de deux angles. /// /// Premier angle /// Deuxième angle /// /// true si les deux angles sont différents, false sinon. /// public static bool operator !=(Radian a, Radian b) { return !(a == b); } /// /// Teste si le premier angle est inférieur au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est inférieur au deuxième, false sinon. /// public static bool operator <(Radian a, Radian b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier angle est supérieur au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est supérieur au deuxième, false sinon. /// public static bool operator >(Radian a, Radian b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier angle est inférieur ou égal au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(Radian a, Radian b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier angle est supérieur ou égal au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(Radian a, Radian b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux angles. /// /// Premier angle /// Deuxième angle /// /// La somme des deux angles. /// public static Radian operator +(Radian a, Radian b) { return new Radian(a.Value + b.Value); } /// /// Soustrait le deuxième angle du premier /// /// Premier angle /// Deuxième angle /// /// La différence entre les deux angles. /// public static Radian operator -(Radian a, Radian b) { return new Radian(a.Value - b.Value); } /// /// Multiplie un angle par un nombre. /// /// angle /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Radian operator *(Radian angle, double multiplier) { return new Radian(angle.Value*multiplier); } /// /// Divise un angle par un nombre. /// /// Angle /// Diviseur /// /// Le résultat de la division. /// public static Radian operator /(Radian angle, double divisor) { return new Radian(angle.Value/divisor); } #endregion #region Methods /// /// Compare cette instance avec un objet du même type. /// /// Objet à comparer avec cette instance. /// Nombre signé indiquant les valeurs relatives de cette instance et other /// /// /// Valeur de retour /// Description /// /// /// Inférieure à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// Supérieure à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(Radian other) { return Value.CompareTo(other.Value); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// une représentation textuelle de l'instance actuelle public override string ToString() { return ToString(null, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// une représentation textuelle de l'instance actuelle public string ToString(string format) { return ToString(format, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// Le fournisseur à utiliser pour formater la valeur /// une représentation textuelle de l'instance actuelle public string ToString(string format, IFormatProvider formatProvider) { var value = Value.ToString(format, formatProvider); return string.Format("{0} rad", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Angle. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Radian angle) { var regex = new Regex(@"(?.*) ?rad"); if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success) { string valueText = regex.Match(text).Groups["value"].Value; double value; if (double.TryParse(valueText, out value)) { angle = new Radian(value); return true; } } angle = new Radian(0); return false; } /// /// Indique si l'instance courante de l'objet est égal à un autre objet du même type. /// /// Objet à comparer avec cette instance. /// /// true si l'instance courante est égale au paramètre ; sinon, false. /// public bool Equals(Radian other) { return Value.Equals(other.Value); } /// /// Determine si l' spécifié est égal à l'instance courante. /// /// L' à comparer avec l'instance courante. /// /// true si l' spécifié est égal à cette instance ; sinon, false. /// public override bool Equals(object obj) { if (obj is Radian) return Equals((Radian) obj); return false; } /// /// Retourne le hash code de cette instance /// /// /// Code de hashage de l'instance actuelle. /// public override int GetHashCode() { unchecked { return Value.GetHashCode(); } } #endregion #region Implementation of IAngle /// /// Obtient la valeur de cet angle en radians /// double IAngle.ValueInRadians { get { return _value; } } #endregion } /// /// Représente un angle en degrés /// public struct Degree : IAngle, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cet angle en degrés public Degree(double value) { _value = value; } /// /// Obtient la valeur ce cet angle. /// /// /// La valeur de cet angle /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en degrés. /// /// Résultat de la conversion. /// public static implicit operator Degree(double value) { return new Degree(value); } /// /// Effectue une conversion explicite de vers . /// /// Angle /// /// Résultat de la conversion. /// public static explicit operator double(Degree angle) { return angle.Value; } /// /// Teste l'égalité de deux angles. /// /// Premier angle /// Deuxième angle /// /// true si les deux angles sont égaux, false sinon. /// public static bool operator ==(Degree a, Degree b) { return a.Equals(b); } /// /// Teste la non-égalité de deux angles. /// /// Premier angle /// Deuxième angle /// /// true si les deux angles sont différents, false sinon. /// public static bool operator !=(Degree a, Degree b) { return !(a == b); } /// /// Teste si le premier angle est inférieur au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est inférieur au deuxième, false sinon. /// public static bool operator <(Degree a, Degree b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier angle est supérieur au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est supérieur au deuxième, false sinon. /// public static bool operator >(Degree a, Degree b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier angle est inférieur ou égal au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(Degree a, Degree b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier angle est supérieur ou égal au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(Degree a, Degree b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux angles. /// /// Premier angle /// Deuxième angle /// /// La somme des deux angles. /// public static Degree operator +(Degree a, Degree b) { return new Degree(a.Value + b.Value); } /// /// Soustrait le deuxième angle du premier /// /// Premier angle /// Deuxième angle /// /// La différence entre les deux angles. /// public static Degree operator -(Degree a, Degree b) { return new Degree(a.Value - b.Value); } /// /// Multiplie un angle par un nombre. /// /// angle /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Degree operator *(Degree angle, double multiplier) { return new Degree(angle.Value*multiplier); } /// /// Divise un angle par un nombre. /// /// Angle /// Diviseur /// /// Le résultat de la division. /// public static Degree operator /(Degree angle, double divisor) { return new Degree(angle.Value/divisor); } #endregion #region Methods /// /// Compare cette instance avec un objet du même type. /// /// Objet à comparer avec cette instance. /// Nombre signé indiquant les valeurs relatives de cette instance et other /// /// /// Valeur de retour /// Description /// /// /// Inférieure à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// Supérieure à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(Degree other) { return Value.CompareTo(other.Value); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// une représentation textuelle de l'instance actuelle public override string ToString() { return ToString(null, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// une représentation textuelle de l'instance actuelle public string ToString(string format) { return ToString(format, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// Le fournisseur à utiliser pour formater la valeur /// une représentation textuelle de l'instance actuelle public string ToString(string format, IFormatProvider formatProvider) { var value = Value.ToString(format, formatProvider); return string.Format("{0}°", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Angle. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Degree angle) { var regex = new Regex(@"(?.*)°"); if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success) { string valueText = regex.Match(text).Groups["value"].Value; double value; if (double.TryParse(valueText, out value)) { angle = new Degree(value); return true; } } angle = new Degree(0); return false; } /// /// Indique si l'instance courante de l'objet est égal à un autre objet du même type. /// /// Objet à comparer avec cette instance. /// /// true si l'instance courante est égale au paramètre ; sinon, false. /// public bool Equals(Degree other) { return Value.Equals(other.Value); } /// /// Determine si l' spécifié est égal à l'instance courante. /// /// L' à comparer avec l'instance courante. /// /// true si l' spécifié est égal à cette instance ; sinon, false. /// public override bool Equals(object obj) { if (obj is Degree) return Equals((Degree) obj); return false; } /// /// Retourne le hash code de cette instance /// /// /// Code de hashage de l'instance actuelle. /// public override int GetHashCode() { unchecked { return Value.GetHashCode(); } } #endregion #region Implementation of IAngle /// /// Obtient la valeur de cet angle en radians /// double IAngle.ValueInRadians { get { return _value / 180 * Math.PI; } } #endregion } /// /// Représente un angle en grades /// public struct Gradian : IAngle, IComparable, IEquatable, IFormattable { private readonly double _value; /// /// Initialise une nouvelle instance de la structure . /// /// La valeur de cet angle en grades public Gradian(double value) { _value = value; } /// /// Obtient la valeur ce cet angle. /// /// /// La valeur de cet angle /// public double Value { get { return _value; } } #region Operators /// /// Effectue une conversion implicite de vers . /// /// Valeur en grades. /// /// Résultat de la conversion. /// public static implicit operator Gradian(double value) { return new Gradian(value); } /// /// Effectue une conversion explicite de vers . /// /// Angle /// /// Résultat de la conversion. /// public static explicit operator double(Gradian angle) { return angle.Value; } /// /// Teste l'égalité de deux angles. /// /// Premier angle /// Deuxième angle /// /// true si les deux angles sont égaux, false sinon. /// public static bool operator ==(Gradian a, Gradian b) { return a.Equals(b); } /// /// Teste la non-égalité de deux angles. /// /// Premier angle /// Deuxième angle /// /// true si les deux angles sont différents, false sinon. /// public static bool operator !=(Gradian a, Gradian b) { return !(a == b); } /// /// Teste si le premier angle est inférieur au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est inférieur au deuxième, false sinon. /// public static bool operator <(Gradian a, Gradian b) { return a.CompareTo(b) < 0; } /// /// Teste si le premier angle est supérieur au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est supérieur au deuxième, false sinon. /// public static bool operator >(Gradian a, Gradian b) { return a.CompareTo(b) > 0; } /// /// Teste si le premier angle est inférieur ou égal au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est inférieur ou égal au deuxième, false sinon. /// public static bool operator <=(Gradian a, Gradian b) { return a.CompareTo(b) <= 0; } /// /// Teste si le premier angle est supérieur ou égal au deuxième. /// /// Premier angle /// Deuxième angle /// /// true si le premier angle est supérieur ou égal au deuxième, false sinon. /// public static bool operator >=(Gradian a, Gradian b) { return a.CompareTo(b) >= 0; } /// /// Additionne deux angles. /// /// Premier angle /// Deuxième angle /// /// La somme des deux angles. /// public static Gradian operator +(Gradian a, Gradian b) { return new Gradian(a.Value + b.Value); } /// /// Soustrait le deuxième angle du premier /// /// Premier angle /// Deuxième angle /// /// La différence entre les deux angles. /// public static Gradian operator -(Gradian a, Gradian b) { return new Gradian(a.Value - b.Value); } /// /// Multiplie un angle par un nombre. /// /// angle /// Multiplicateur /// /// Le résultat de la multiplication. /// public static Gradian operator *(Gradian angle, double multiplier) { return new Gradian(angle.Value*multiplier); } /// /// Divise un angle par un nombre. /// /// Angle /// Diviseur /// /// Le résultat de la division. /// public static Gradian operator /(Gradian angle, double divisor) { return new Gradian(angle.Value/divisor); } #endregion #region Methods /// /// Compare cette instance avec un objet du même type. /// /// Objet à comparer avec cette instance. /// Nombre signé indiquant les valeurs relatives de cette instance et other /// /// /// Valeur de retour /// Description /// /// /// Inférieure à zéro /// Cette instance est inférieure à other. /// /// /// Zéro /// Cette instance est égale à other. /// /// /// Supérieure à zéro /// Cette instance est supérieure à other. /// /// /// public int CompareTo(Gradian other) { return Value.CompareTo(other.Value); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// une représentation textuelle de l'instance actuelle public override string ToString() { return ToString(null, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// une représentation textuelle de l'instance actuelle public string ToString(string format) { return ToString(format, null); } /// /// Retourne une représentation textuelle de l'instance actuelle /// /// Le format à utiliser /// Le fournisseur à utiliser pour formater la valeur /// une représentation textuelle de l'instance actuelle public string ToString(string format, IFormatProvider formatProvider) { var value = Value.ToString(format, formatProvider); return string.Format("{0} gon", value); } /// /// Essaye de parser le texte. /// /// Texte à parser. /// Angle. /// true, si le parsing est réussi; sinon false. public static bool TryParse(string text, out Gradian angle) { var regex = new Regex(@"(?.*) ?gon"); if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success) { string valueText = regex.Match(text).Groups["value"].Value; double value; if (double.TryParse(valueText, out value)) { angle = new Gradian(value); return true; } } angle = new Gradian(0); return false; } /// /// Indique si l'instance courante de l'objet est égal à un autre objet du même type. /// /// Objet à comparer avec cette instance. /// /// true si l'instance courante est égale au paramètre ; sinon, false. /// public bool Equals(Gradian other) { return Value.Equals(other.Value); } /// /// Determine si l' spécifié est égal à l'instance courante. /// /// L' à comparer avec l'instance courante. /// /// true si l' spécifié est égal à cette instance ; sinon, false. /// public override bool Equals(object obj) { if (obj is Gradian) return Equals((Gradian) obj); return false; } /// /// Retourne le hash code de cette instance /// /// /// Code de hashage de l'instance actuelle. /// public override int GetHashCode() { unchecked { return Value.GetHashCode(); } } #endregion #region Implementation of IAngle /// /// Obtient la valeur de cet angle en radians /// double IAngle.ValueInRadians { get { return _value / 200 * Math.PI; } } #endregion } /// /// Fournit des méthodes d'extension pour les angles /// public static class AngleExtensions { /// /// Convertit un angle en radians /// /// Le type de l'unité d'origine /// Angle à convertir /// Valeur en radians public static Radian ToRadian(this T angle) where T : IAngle { return angle.ValueInRadians; } /// /// Convertit un angle en degrés /// /// Le type de l'unité d'origine /// Angle à convertir /// Valeur en degrés public static Degree ToDegree(this T angle) where T : IAngle { return angle.ValueInRadians * 180 / Math.PI; } /// /// Convertit un angle en grades /// /// Le type de l'unité d'origine /// Angle à convertir /// Valeur en grades public static Gradian ToGradian(this T angle) where T : IAngle { return angle.ValueInRadians * 200 / Math.PI; } /// /// Renvoie le sinus de l'angle. /// /// Le type de l'unité d'angle /// Angle /// Le sinus de l'angle public static double Sin(this T angle) where T : IAngle { return Math.Sin(angle.ValueInRadians); } /// /// Renvoie le cosinus de l'angle. /// /// Le type de l'unité d'angle /// Angle /// Le cosinus de l'angle public static double Cos(this T angle) where T : IAngle { return Math.Cos(angle.ValueInRadians); } /// /// Renvoie la tangeante de l'angle. /// /// Le type de l'unité d'angle /// Angle /// La tangeante de l'angle public static double Tan(this T angle) where T : IAngle { return Math.Tan(angle.ValueInRadians); } /// /// Renvoie le sinus hyperbolique de l'angle. /// /// Le type de l'unité d'angle /// Angle /// Le sinus hyperbolique de l'angle public static double Sinh(this T angle) where T : IAngle { return Math.Sinh(angle.ValueInRadians); } /// /// Renvoie le cosinus hyperbolique de l'angle. /// /// Le type de l'unité d'angle /// Angle /// Le cosinus hyperbolique de l'angle public static double Cosh(this T angle) where T : IAngle { return Math.Cosh(angle.ValueInRadians); } /// /// Renvoie la tangeante hyperbolique de l'angle. /// /// Le type de l'unité d'angle /// Angle /// La tangeante hyperbolique de l'angle public static double Tanh(this T angle) where T : IAngle { return Math.Tanh(angle.ValueInRadians); } } }