sehr informativ, danke
Für alle, die noch an der Lösung interessiert sind:
Delphi-Quellcode:
function TMain.PunktAnGeradeSpiegeln(A, B, P: TPoint): TPoint;
var
xS,yS: Real;
begin
xS:= - P.X + 2*(((A.X-B.X)*(A.X-B.X)*P.X + (A.Y-B.Y)*(A.Y-B.Y)*A.X + (A.X-B.X)*(A.Y-B.Y)*P.Y - (A.X-B.X)*(A.Y-B.Y)*A.Y) / ((A.Y-B.Y)*(A.Y-B.Y) + (A.X-B.X)*(A.X-B.X)));
yS:= - P.Y + 2*(((A.X-B.X)*(A.Y-B.Y)*P.X - (A.X-B.X)*(A.Y-B.Y)*A.X + (A.Y-B.Y)*(A.Y-B.Y)*P.Y + (A.X-B.X)*(A.X-B.X)*A.Y) / ((A.Y-B.Y)*(A.Y-B.Y) + (A.X-B.X)*(A.X-B.X)));
Result:= Point(Round(xS),Round(yS));
end;
A und B legen die Gerade fest. P ist derjenige Punkt, der an der Gerade [AB] gespiegelt werden soll. Die Funktion gibt den Spiegelpunkt zurück. Bei beiden Koordinaten wird mit exakten Werten gerechnet, anschließend werden sie gerundet.
Ansatz:
1) Geradengleichung
2) Normalengleichung
3) Gleichsetzen
4) Nach X bzw. Y auflösen
Funktion erfolgreich getestet, danke für die Aufmerksamkeit
i n f l i c t e d . d e