Hallo pumpkin,
lies mal das:
http://deposit.ddb.de/cgi-bin/dokserv?idn=967374103
Insbesondere Anhang B.1.
Da geht es zwar um die Ausgleichsebene. Dabei wird nur der zum kleinsten Eigenwert gehörige Eigenvektor benutzt.
Bei einer Ausgleichsgerade nähme man den Eigenvektor, der zum größten Eigenvektor gehört.
Das Ellipsoid ist dann durch alle drei Eigenvektoren bestimmt.
ich habe ein Volumen (3D) das in einen aquivalenten*
Ellipsoiden umgeformt werden soll. Das Volumen ist als
boolsche Funktion IsInside(x,y,z) gegeben, wobei x, y und z
ganze Zahlen sind.
Ich habe das so verstanden: Du suchst ein Ellipsoid, das die Punktwolke, die Du durch IsInside(x, y, z) bekommst möglichst gut annähert.
Es ist hier natürlich problematisch, welche x, y, z Du bei der Auswertung berücksichtigst. Auf den hier genannten Algorithmus kommt man, wenn man Fehlerquadrate minimiert. So wie Du es beschreibst, willst Du wohl eher soetwas wie das kleinste umhüllende Ellipsoid, dafür brauchst Du einen anderen Algorithmus.
Wichtig sind mir die Längen der 3 Achsen.
Und deren Richtung?
Bekannt ist der Mittelpunkt.
Ist der Weg richtig?
- den Mittelpunkt auf 0,0,0 verschieben (damit das rechnen
einfacher wird)
Stimmt.
-
Alle Punkte i innerhalb des Ellipsoiden als Vektor
vi =
(xi,yi,zi)
nehmen und die Matrix vi *
vit =
Mi ausrechnen.
-
M = Summe aller Mi bestimmen.
Da bin ich mir nicht ganz sicher, was Du damit meinst.
Jedenfalls musst Du sechs verschiedene Summen bilden, die die Elemente einer symmetrischen 3x3-Matrix ergeben. Diese Summen findest Du in obigem Link.
- Eigenwerte von M bestimmen.
Und die Eigenvektoren, sofern auch die Orientierung des Ellipsoids interessiert.
Ich glaube die Eigenwerte müssten dann den Achslängen
entsprechen.
Über die absoluten Längen bin ich mir nicht ganz sicher, aber die Verhältnisse zueinander stimmen. Dir fhlt also allenfalls nur noch ein Skalierungsfaktor.
* aquivalent im Sinne von gleiches eingeschlossenes Volumen
wäre klasse.
Mit der Funktion IsInside(x,y,z) gegeben, wobei x, y und z ganze Zahlen sind,
bekommst Du nur einzelne Punkte. Du kannst Dich nicht beliebig genau an die Oberfläche herantasten. Insofern ist Dein zu erreichendes Volumen nicht recht gut definiert.
Viele Grüße
Stefan