bonhomeExamJanvier/Bonhomme02/Vecteur.cs

95 lines
2.5 KiB
C#

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
}