Dankeschön! Verstehe es nicht ganz aber funktioniert schon mal ziemlich gut. Bei genau 45 Grad sehe ich ein "Springer" wenn ich ein Quadrat verwende.
[ Hier würde ich gerne das Problem mit eine GIF darstellen, scheint aber nicht möglich zur sein als neue User oder finde kann man ein Bild im Kommentar einfügen? ]
Viel wichtiger wäre mit das es auch mit Rechtecken funktioniert die keine Quadrate sind. Da scheint die aktuelle Berechnung ab ca. der diagonalen Position unvollständig zu sein.
Mit
PointF a = new PointF(3, 0);
PointF b = new PointF(0, 6);
komme ich ab 27 Grad in Negative Bereiche. Ab ca 64 sieht es wieder gut aus. Sieht so aus als müsste man die Winkel dazwischen "ignorieren".?? Der Bereich ist abhängig vom Seitenverhältnis des äußeren Rechtecks, bzw. vom Winkel...
Was auch ein kleines Problem ist dass das Rechteck auf 0;0 stehen muss sonst passen die Punkte nicht.
Wenn ich z.B. folgendes mache:
PointF a = new PointF(5, 1);
PointF b = new PointF(1, 5);
double t = (a.x*cos - b.y*sin) / (cos*cos - sin*sin);
float p = (float)(t*cos);
PointF P = new PointF(p, a.y);
dann wandert P.x ab 77 Grad auf kleiner 1.
15.0 Grad --> p(3.94;1.0)
30.0 Grad --> p(3.17;1.0)
70.0 Grad --> p(1.33;1.0)
76.0 Grad --> p(1.0;1.0)
81.0 Grad --> p(0.68;1.0)
89.0 Grad --> p(0.09;1.0)