2018-01-03 13:18:01 +01:00
|
|
|
|
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)
|
2018-01-05 01:51:12 +01:00
|
|
|
|
{
|
|
|
|
|
parent.vecteur = Complex.FromPolarCoordinates(parent.vecteur.Magnitude, value);
|
|
|
|
|
vecteur = Complex.FromPolarCoordinates(vecteur.Magnitude, parent.Angle - Math.PI / 2);
|
|
|
|
|
}
|
2018-01-03 13:18:01 +01:00
|
|
|
|
else
|
|
|
|
|
vecteur = Complex.FromPolarCoordinates(vecteur.Magnitude, value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int X
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-01-05 01:51:12 +01:00
|
|
|
|
return (int)Math.Round(vecteur.Real);
|
2018-01-03 13:18:01 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public int Y
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2018-01-05 01:51:12 +01:00
|
|
|
|
return (int)Math.Round(vecteur.Imaginary);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public double ABS
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return vecteur.Magnitude;
|
2018-01-03 13:18:01 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#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);
|
|
|
|
|
}
|
2018-01-05 15:29:45 +01:00
|
|
|
|
public static Vecteur operator /(double d, Vecteur v)
|
|
|
|
|
{
|
2018-01-05 16:28:13 +01:00
|
|
|
|
return new Vecteur(d / v.ABS, v.Angle);
|
2018-01-05 15:29:45 +01:00
|
|
|
|
}
|
|
|
|
|
public static Vecteur operator /(Vecteur v, double d)
|
|
|
|
|
{
|
2018-01-05 16:28:13 +01:00
|
|
|
|
return new Vecteur(v.ABS / d, v.Angle);
|
2018-01-05 15:29:45 +01:00
|
|
|
|
}
|
2018-01-03 13:18:01 +01:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|