Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   BestFit Ebenengleichung durch Punktwolke (https://www.delphipraxis.net/135580-bestfit-ebenengleichung-durch-punktwolke.html)

Andy386 13. Jun 2009 16:41


BestFit Ebenengleichung durch Punktwolke
 
Hallo,

eigentlich ist meine derzeitige Sprache MATLAB, da hab ich nur leider kein vernünftiges Forum gefunden. Hatte letztes Jahr hier immer gute Erfahrungen gemacht...

Ich möchte den Tangentialvektor an einen Punkt (eines Körpers) im Raum finden.
Mit der Hess'schen Normalform dürfte das nicht so schwer werden: ax+by+cz=d, der Vektor ist dann (a,b,c)
Klassifiziert ist mein Körper durch p1(x1,y1,z1) bis pn(xn,yn,zn),
den Punkt, an dem ich ableiten möchte, kenne ich auch und damit die Punkte, durch die die Ebene gehen soll (also best fit mässig...).
Ich habe jetzt folgendes Problem: Wie finde ich die Best-Fit-Ebene durch eine Punktwolke ?
für n=3 gibt es Formeln, um die Ebene aufzuspannen, aber für mehr als drei habe ich nix gefunden.

a, b und c für 3 Punkte erhalte ich durch Lösung des LGS:
http://pic-hoster.net/thumb/6b3dd4fa...6561fe787e.png

Wie sähe das ganze für mehr als drei Punkte aus ?
Wird das ein Optimierungsproblem?


[edit=Matze]Hinweis zum Verschieben des Themas aus dem Beitrag und der Überschrift entfernt. MfG, Matze[/edit]

DP-Maintenance 13. Jun 2009 19:17

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Sonstige Fragen zu Delphi" nach "Programmieren allgemein" verschoben.

Nikolas 13. Jun 2009 22:14

Re: BestFit Ebenengleichung durch Punktwolke
 
kannst du das ein bischen präzisieren? Ich verstehe dein Problem so: Du hast eine Punktwolke, die einen Körper beschreibt und einen Punkt an deren Oberfläche (also aussen, genau wäre das ein bischen schwer zu definieren), durch den du eine Tangentialfläche zu dem Körper angeben willst.
Wenn dein Körper konvex ist, könntest du erst die konvexe Hülle berechnen und dann einfach das Dreieck auswählen, das den geringesten Abstand zu deinem Punkt hat. Wenn dein Körper allerdings nicht konvex ist, wird das ganze ein bischen schwieriger, da könntest du das gleiche Verfahren nehmen, dabei aber statt der konvexen Hülle die alpha-shape der Punktwolke einsetzen.
Dafür könntest du z.B. cgal einsetzen, eine recht unfangreiche aber freie Bibliothek zur Computergeometrie.

Andy386 14. Jun 2009 00:32

Re: BestFit Ebenengleichung durch Punktwolke
 
Äh, :oops: hab vergessen zu erwähnen, dass die Punkte nur auf der Hüllfläche des Körpers einen Wert haben, innen drin sind die genau so wie draussen Null.
Deswegen muss ich nicht weiter betrachten, ob die Punkte nun "im" Körper sind oder nicht<. ich ziehe einfach eine Kugel um den zu untersuchenden Punkt und erhalte dann die Punktwolke, durch die die Ebene gehen soll.

Danke für den Tipp mit cgal, ich glaube, ich hab jetzt die korrekte englische Bezeichnung gefunden: "least square plane fitting"
ich wusel mich mal durch google durch...

Reinhard Kern 14. Jun 2009 00:38

Re: BestFit Ebenengleichung durch Punktwolke
 
Zitat:

Zitat von Andy386
... ich glaube, ich hab jetzt die korrekte englische Bezeichnung gefunden: "least square plane fitting"
...

Hallo,

das heisst einfach: wähle die Ebene so, dass die Summe der Quadrate der Abstände aller Punkte zur Ebene minimal wird. Typische Optimierungsaufgabe.

Gruss Reinhard

Andy386 14. Jun 2009 09:53

Re: BestFit Ebenengleichung durch Punktwolke
 
:dp:
hab sogar schon was in M-Code gefunden :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz