using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Numerics; using System.Drawing; namespace Bonhomme01 { class Vecteur { public Complex point; Complex origine; Boolean flagDeplacerOrigine; public int X { get { return (int)point.Real; } } public int Y { get { return (int)point.Imaginary; } } public double ABS { get { if (!flagDeplacerOrigine) { DeplacerSurOrigine(); double abs = point.Magnitude; RetoursPosition(); return abs; } else return point.Magnitude; } set { } } public Vecteur(int x, int y, int xo, int yo) { point = new Complex(x, y); origine = new Complex(xo, yo); flagDeplacerOrigine = false; } public Vecteur(Vecteur a, Vecteur b) { point = new Complex(b.X, b.Y); origine = new Complex(a.X, a.Y); flagDeplacerOrigine = false; } public Vecteur(Point a, Point b) { point = new Complex(b.X, b.Y); origine = new Complex(a.X, a.Y); flagDeplacerOrigine = false; } public Vecteur(int x, int y, int xo, int yo, double degre) { point = new Complex(x, y); origine = new Complex(xo, yo); flagDeplacerOrigine = false; RotateDegre(degre); } public void RotateDegre(double angle) { double radian = (angle%360) * (Math.PI / 180); point = Complex.Subtract(point, origine); point = Complex.FromPolarCoordinates(point.Magnitude, point.Phase + radian); point = Complex.Add(point, origine); } public void RotateRadian(float radian) { point = Complex.Subtract(point, origine); point = Complex.Add(point, Complex.FromPolarCoordinates(point.Magnitude, point.Phase + radian)); point = Complex.Add(point, origine); } public static Point Millieux(Vecteur a, Vecteur b) { Vecteur pt = new Vecteur(a, b); pt.DeplacerSurOrigine(); pt.point = Complex.FromPolarCoordinates(pt.point.Magnitude / 2, pt.point.Phase); pt.RetoursPosition(); return new Point(pt.X, pt.Y); } public Point Millieux() { DeplacerSurOrigine(); point = Complex.FromPolarCoordinates(point.Magnitude / 2, point.Phase); RetoursPosition(); return new Point((int)point.Real, (int)point.Imaginary); } public void DeplacerSurOrigine() { if (!flagDeplacerOrigine) { flagDeplacerOrigine = true; point = Complex.Subtract(point, origine); } } public void RetoursPosition() { if (flagDeplacerOrigine) { flagDeplacerOrigine = false; point = Complex.Add(point, origine); } } public static implicit operator Point(Vecteur point) { return new Point(point.X, point.Y); } } }