Ich habe dazu den Anfang der Zeichenmethode der Ellipse Extrahiert und in die Funktion eingefügt, damit ich die gleichen Berrechnungen des Zentrums, Radiuses und Stauchungsfaktors habe.
Jetzt wollte ich einfach ein Vektor zwischen dem Zentrum und P aufspannen und mir über den Winkel des Vektors die Länge errechnen, die der Vektor haben müsste, um auf der Bogenlinie zu liegen.
Doch wenn ich den Code teste, wird ein Punkt p als True markiert, der überhaupt nicht auf der Ellipse liegt, sondern darüber, das geschieht aber nur bei Punkten über der Krümmung, also nicht nahe den äußersten Punkten.
Hier der Code:
Code: Alles auswählen
public override bool IsPointOnObject(PointF p)
{
PointF center = new PointF(BorderRect.X + (BorderRect.Width / 2),
BorderRect.Y - (BorderRect.Height / 2));
double radius = BorderRect.Height / 2;
double scaleQuotient = BorderRect.Width / BorderRect.Height;
VectorF v = new VectorF(center, p);
double length = System.Math.Sqrt(
System.Math.Pow(System.Math.Cos(v.GetRad()) * radius * scaleQuotient, 2) +
System.Math.Pow(System.Math.Sin(v.GetRad()) * radius, 2)
);
if ((v.GetLength() >= (length - (double)Intolerance)) && (v.GetLength() <= (length + (double)Intolerance)))
{
return true;
}
return false;
}
Intolerance ist ein Klassenmember, das eine Bedingte Intoleranz angibt.
BorderRect ist das Rechteck das die Ellipse umschließt.
PS: Ich weiß das der Titel nicht ganz Treffend ist, bin aber gerade ein wenig Müde.