Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Ellipse aus 5 Punkten


Daniel L. - Mo 04.06.18 13:53
Titel: Ellipse aus 5 Punkten
Hi,

kennt jemand zufällig ein Tool/Unit oder so, was aus 5 vorgegebenen Punkten eine Ellipse berechnen kann?
(z. B. die Lage der Hauptachsen oder eine Rechenanweisung, um beliebige ander Punkte zu berechnen)

ich bin zu lange aus der Mathe raus, um das ohne Riesenaufwand rauszutüffteln...

(Stichwörter: Allgemeine Kegelschnittgleichung, lineares Gleichnungssystem, Hauptachsentransformation...)

Gruß: Daniel L.


Gammatester - Di 05.06.18 17:08

Hallo,

ich weiß wie deprimierend es sein kann, wenn keine Antworten eintrudeln. Ich gehe davon aus, daß Du selbst schon gesucht hast. Was ich gefunden habe (ohne die Sachen auszuprobieren) ist:

Tool: https://wiki.geogebra.org/de/Kegelschnitt_durch_f%C3%BCnf_Punkte_%28Werkzeug%29

Jede Menge Mathe-Formuln: http://mathworld.wolfram.com/QuadraticCurve.html

Vielleicht hilft's ja weiter.


Daniel L. - Di 05.06.18 20:56

Hallo Gammatester,

danke für deine Rückmeldung.

In der Tat habe ich schon viel gesucht, und bin auch auf deinen Seiten gelandet.
Die Infos von wolfram.com sind mir zu kompliziert, und mit geogebra lässt sich eine Ellipse auf 5 Punkten zwar super zeichnen,
aber es gibt keine mathematische/programmatische Erklärung.

Inwzischen ist es mit aber gelungen, ein Beispiel schriftlich und mit progamierbarem Taschenrechner zu berechnen, und aus 5 Punkten beliebig weitere auszurechnen.

Ausserdem habe ich DMath gefunden (Math library for Delphi, FreePascal and Lazarus),
da gibts schon mal ein linearen Gleichungslöser.

Ich werd versuchen, das zu verallgemeinern und mit Delphi umzusetzen.

Wenn ich nicht weiterkomm, werde ich hier noch mas was fragen...

Gruß: Daniel L.


Daniel L. - Mo 18.06.18 10:30

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:
ellipse5_2
-----------------------------------------------------------------

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.


Narses - Mi 20.06.18 02:05

Moin!

user profile iconDaniel L. hat folgendes geschrieben Zum zitierten Posting springen:
Frage: Wo könnte ich das dann posten - auch in dieser Rubrik ?
Ich denke das sollte in Open-Source-Units [https://www.entwickler-ecke.de/forum_Open+Source+Units_46.html] oder Open-Source-Projekte [https://www.entwickler-ecke.de/forum_Open+Source+Projekte_28.html] passen. ;)

cu
Narses


ub60 - Mi 20.06.18 18:15

Danke erst mal für die ausführliche Beschreibung.
Auf das Programm bin ich schon gespannt ...

ub60