Mega Code Archive

 
Categories / C# / Development Class
 

PointD

using System; using System.Drawing; public struct PointD {     public double X, Y;     public PointD(double X, double Y)     {         this.X = X;         this.Y = Y;     }     public static explicit operator PointF(PointD pt)     {         return new PointF((float)pt.X, (float)pt.Y);     }     public static implicit operator PointD(PointF pt)     {         return new PointF(pt.X, pt.Y);     }     public override string ToString()     {         return string.Format("({0}, {1})", X, Y);     }     public override int GetHashCode()     {         return X.GetHashCode() ^ Y.GetHashCode();     }     public override bool Equals(object obj)     {         if (obj is PointD)             return this == (PointD)obj;         return ((PointF)this).Equals(obj);     }     public static PointD operator +(PointD pt, SizeD size)     {         return new PointD(pt.X + size.Width, pt.Y + size.Height);     }     public static PointD operator -(PointD pt, SizeD size)     {         return new PointD(pt.X - size.Width, pt.Y - size.Height);     }     public static SizeD operator -(PointD pt1, PointD pt2)     {         return new SizeD(pt1.X - pt2.X, pt1.Y - pt2.Y);     }     public static bool operator ==(PointD a, PointD b)     {         return Misc.CmpDbl(a.X, b.X) && Misc.CmpDbl(a.Y, b.Y);     }     public static bool operator !=(PointD a, PointD b) { return !(a == b); }     public static bool operator <(PointD pt1, PointD pt2)     {         return pt1.X < pt2.X && pt1.Y < pt2.Y;     }     public static bool operator >(PointD pt1, PointD pt2)     {         return pt1.X > pt2.X && pt1.Y > pt2.Y;     }     public static bool operator <=(PointD pt1, PointD pt2)     {         return pt1.X <= pt2.X && pt1.Y <= pt2.Y;     }     public static bool operator >=(PointD pt1, PointD pt2)     {         return pt1.X >= pt2.X && pt1.Y >= pt2.Y;     }     public static PointD Min(PointD pt1, PointD pt2)     {         return new PointD(Math.Min(pt1.X, pt2.X), Math.Min(pt1.Y, pt2.Y));     }     public static PointD Max(PointD pt1, PointD pt2)     {         return new PointD(Math.Max(pt1.X, pt2.X), Math.Max(pt1.Y, pt2.Y));     } } using System; using System.Drawing; namespace NobleTech.Products.CreatureKingdom.Utils {     public struct SizeD     {         public double Width, Height;         public SizeD(double Width, double Height)         {             this.Width = Width;             this.Height = Height;         }         public static SizeD FromAngle(double Angle, double Length)         {             return new SizeD(Math.Sin(Angle) * Length, Math.Cos(Angle) * Length);         }         public static explicit operator SizeF(SizeD size)         {             return new SizeF((float)size.Width, (float)size.Height);         }         public static implicit operator SizeD(SizeF size)         {             return new SizeD(size.Width, size.Height);         }         public static implicit operator SizeD(Size size)         {             return new SizeD(size.Width, size.Height);         }         public override string ToString()         {             return string.Format("({0}, {1})", Width, Height);         }         public override int GetHashCode()         {             return Width.GetHashCode() ^ Height.GetHashCode();         }         public override bool Equals(object obj)         {             if (obj is SizeD)                 return this == (SizeD)obj;             return ((SizeF)this).Equals(obj);         }         public static bool operator ==(SizeD a, SizeD b)         {             return a.Width == b.Width && a.Height == b.Height;         }         public static bool operator !=(SizeD a, SizeD b) { return !(a == b); }         public static SizeD operator +(SizeD size1, SizeD size2)         {             return new SizeD(size1.Width + size2.Width, size1.Height + size2.Height);         }         public static SizeD operator -(SizeD size1, SizeD size2)         {             return new SizeD(size1.Width - size2.Width, size1.Height - size2.Height);         }         public static SizeD operator *(double x, SizeD v) { return new SizeD(v.Width * x, v.Height * x); }         public static SizeD operator *(SizeD v, double x) { return x * v; }         public static SizeD operator /(SizeD v, double x) { return new SizeD(v.Width / x, v.Height / x); }         public static SizeD operator %(SizeD v, double x) { return new SizeD(v.Width % x, v.Height % x); }         public double Length { get { return Math.Sqrt(Width * Width + Height * Height); } }         public double Angle { get { return Misc.NormaliseAngle(Math.Atan2(Width, Height)); } }     } }