using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Numerics; using System.Text; using System.Threading.Tasks; namespace Bonhomme02 { class Vecteur { #region donnée private Vecteur parent = null; private Complex vecteur; #endregion #region accesseur public double Angle { get { if (parent != null) return parent.Angle - Math.PI/2; else return vecteur.Phase; } set { if (parent != null) Console.WriteLine("Erreur : La définition de l'angle d'un enfant ne peut-être fait !"); else vecteur = Complex.FromPolarCoordinates(vecteur.Magnitude, value); } } public int X { get { return (int)vecteur.Real; } } public int Y { get { return (int)vecteur.Imaginary; } } #endregion #region constructeur public Vecteur() { } public Vecteur(double longueur, double angle) { vecteur = Complex.FromPolarCoordinates(longueur, angle); } public Vecteur(double longueur, ref Vecteur parent, bool flag) : this(longueur, parent.Angle - Math.PI / 2) { this.parent = parent; } #region operateur public static explicit operator Point(Vecteur v) // Rsique de perte de précision donc explicit { return new Point(v.X, v.Y); } public static implicit operator Vecteur(Point pt) { Complex c = new Complex(pt.X, pt.Y); return new Vecteur(c.Magnitude, c.Phase); } public static Point operator +(Vecteur v, Point pt) { return new Point(v.X + pt.X, v.Y + pt.Y); } public static Point operator +(Point pt, Vecteur v) { return new Point(v.X + pt.X, v.Y + pt.Y); } public static Point operator -(Vecteur v, Point pt) { return new Point(v.X - pt.X, v.Y - pt.Y); } public static Point operator -(Point pt, Vecteur v) { return new Point(pt.X - v.X, pt.Y - v.Y); } #endregion } #endregion }