// 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);
}
}
}