using System; using System.Collections.Generic; using System.Text; namespace SalsaModel { struct Angle { const double Min = -Math.PI; const double Max = Math.PI; const double Range = Max - Min; double _val; public Angle(double init) { init = Normalise(init); _val = init; } private static double Normalise(double init) { while (init < Min) { init += Range; } while (init >= Max) { init -= Range; } return init; } public double Value { get { return _val; } } public static Angle operator +(Angle a, Angle b) { return new Angle(a.Value + b.Value); } public static Angle operator -(Angle a, Angle b) { return new Angle(a.Value - b.Value); } public static Angle operator *(Angle a, double f) { return new Angle(a.Value * f); } public override bool Equals(object obj) { if (obj is Angle) { Angle a = (Angle)obj; return a.Value == this.Value; } return false; } public static bool operator ==(Angle a, Angle b) { return a.Equals(b); } public static bool operator !=(Angle a, Angle b) { return !a.Equals(b); } public override int GetHashCode() { return Value.GetHashCode(); } } }