C# Dessin Arc avec 3 Points

J'ai besoin de dessiner un arc à l'aide de GraphicsPath et ayant initiale, médiane et finale des points. L'arc a à passer sur eux.

J'ai essayé .DrawCurve et .DrawBezier mais le résultat n'est pas exactement un arc.

Que puis-je faire?

SOLUTION:

Après une couple d'heures de l'écriture de code, j'ai réussi à dessiner ce que je voulais avec cet algorithme (donner 3 points a,b,c et une GraphicsPath chemin d'accès):

double d = 2 * (a.X - c.X) * (c.Y - b.Y) + 2 * (b.X - c.X) * (a.Y - c.Y);
double m1 = (Math.Pow(a.X, 2) - Math.Pow(c.X, 2) + Math.Pow(a.Y, 2) - Math.Pow(c.Y, 2));
double m2 = (Math.Pow(c.X, 2) - Math.Pow(b.X, 2) + Math.Pow(c.Y, 2) - Math.Pow(b.Y, 2));
double nx = m1 * (c.Y - b.Y) + m2 * (c.Y - a.Y);
double ny = m1 * (b.X - c.X) + m2 * (a.X - c.X);
double cx = nx / d;
double cy = ny / d;
double dx = cx - a.X;
double dy = cy - a.Y;
double distance = Math.Sqrt(dx * dx + dy * dy);
Vector va = new Vector(a.X - cx, a.Y - cy);
Vector vb = new Vector(b.X - cx, b.Y - cy);
Vector vc = new Vector(c.X - cx, c.Y - cy);
Vector xaxis = new Vector(1, 0);
float startAngle = (float)Vector.AngleBetween(xaxis, va);
float sweepAngle = (float)(Vector.AngleBetween(va, vb) + Vector.AngleBetween(vb, vc));
path.AddArc(
(float)(cx - distance), (float)(cy - distance),
(float)(distance * 2), (float)(distance * 2), 
startAngle, sweepAngle);
voulez-vous dire un arc de cercle, ou sera toute à l'arc?
circulaire, j'ai oublié d'ajouter que

OriginalL'auteur Keeper | 2010-05-24