So, ich hab etwas in Mathe nachgesessen und folgendes ist dabei rausgekommen:
Grundsätzliches:
Eine Ellipse ist ein Kegelschnitt, aber nicht jeder Kegelschnitt ist eine Ellipse.
Eine Ellipse ist durch 5 Ellipspunkte eindeutig definiert, aber nicht jede 5 Punkte ergeben eine Ellipse.
Allgemein Kegelschnittgleichung: Ax^2 + By + Cy^2 + Dx + Ey + F = 0
Ein Koeffizient (z.B A) kann auf 1 gesetzt werden -->
x^2 + By + Cy^2 + Dx + Ey + F = 0
----------------------------------------------------------------
Folgendes wird benötigt:
Kegelschnittgleichung nach x aufgelöst (quadratische Gleichung):
(nach y aufgelöst wäre auch möglich, dann wären nachfolgende Gleichungen entsprechend modifiziert)
diskr = (D + By)^2 - 4*(F + Ey + Cy^2)
x1 = 0.5 * (-D - By - sqrt (diskr)) Gleichung I
x2 = 0.5 * (-D - By + sqrt (diskr)) Gleichung II
Definitionsbereich für y bilden, dafür diskr = 0 gesetzt und nach y' aufgelöst (quadratische Gleichung):
diskr' = CD^2 - BDE + E^2 + FB^2 - 4CF
nenner' = B^2 - 4C
restFaktor' = -B*D + 2*E
y1' = restFaktor' - 2*sqrt (diskr')) / nenner'
y2' = restFaktor' + 2*sqrt (diskr')) / nenner'
hier nochmal als Grafik:
-----------------------------------------------------------------
Vorgehensweise:
Gegeben: irgendwelche 5 Punkte (P0x/P0y) .. (P4x/P4y)
# Koeffizienten B..F berechnen:
P0 .. P4 jeweils in die Kegelschnittgleichung einsetzen,
man erhält ein lineares Gleichungssystem (5 Gleichungen mit 5 Unbekannten),
so kann B..F berechnet werden.
Jetzt kann man aus einem y zwei Ellipsenpunkte x1 und x2 berechnen (Gleichung I/II)
aber es kommen nur solche y in Frage, die eine positive diskr ergeben,
es muss also vorher der Definitionsbereich für y gebildet werden:
# Definitionsbereich für y:
diskr > 0 setzen und nach y' auflösen (quadratische Ungleichung):
dafür:
diskr = 0 setzen und nach y' auflösen (quadratische Gleichung),
ergibt 2 Lösungen (y1', y2') mit diskr', nenner' und restFatkor' - s. o.
diskr' muss > 0 sein und nenner' muss <> 0 sein (sonst Error)
Eine Zahl für y' zwischen y1' und y2' (yMean') in die Ungleichung Diskr > 0 einsetzen:
(D + B*yMean')^2 - 4*(F + E*yMean' + C*yMean'^2) > 0
Wenn diese Ungleichung wahr ist, dann liegt der Definitionsbereich für y' zwischen y1' und y2',
was schlussendlich auf eine Ellipse schliessen lässt.
# Ellipspunkte kreieren:
In beliebigen Schritten ein y zwischen y1' und y2' als y-Wert eines Ellipsenpunktes
nehmen und in Gleichung I und Gleichung II einsetzen:
es entsteht jeweils der x-Wert des Ellipsenpunktes.
# Mögliche Errors:
- lineares Gleichungssystem ergibt keine eindeutige Lösung
- Nenner' = 0
- Diskr' <= 0
- Definitionsbereich für y' liegt nicht zwischen y1' und y2'
Wenn ein Error vorliegt, ergeben die 5 Punkte keine Ellipse.
Es handelt sich dann entweder um eine Hyperbel, eine Parabel, einen entarteten Kegelschnitt,
oder die Kegelschnittgleichung ist garrnicht oder nicht eindeutig lösbar.
Ich bin dabei, mit Delphi eine entsprechende Unit mit einem kleinen Demoprogramm
zu programmieren.
Frage: Wo könnte ich das dann posten - auch in dieser Rubrik ?
edit: kann ich erst nach den Ferien fertigstellen - sry
Gruß : Daniel L.