bonhomeExamJanvier/Bonhomme01/Vecteur.cs

120 lines
3.4 KiB
C#

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