Ich versuche, eine Geometrie-Templating-Engine zu implementieren. Einer der Teile ist die Einnahme eines prototypischen polygonalen Mesh und Ausrichten einer Instanziierung mit einigen Punkten in das größere Objekt.
Also, das Problem ist dieses: gegeben 3d Punktpositionen für einige (vielleicht alle) der Verts in einem polygonalen Netz, finden Sie eine skalierte Rotation, die die Differenz zwischen den transformierten Verts und die gegebenen Punktpositionen minimiert. Ich habe auch einen Mittelpunkt, der fest bleiben kann, falls das hilft. Die Korrespondenz zwischen den Scheitelpunkten und den 3D-Positionen ist fest.
Ich denke, dies könnte durch die Lösung der Koeffizienten einer Transformationsmatrix geschehen, aber ich bin mir nicht sicher, wie ich das zu lösende System aufbauen soll.
Ein Beispiel dafür ist ein Würfel. Der Prototyp wäre der Einheitswürfel, zentriert im Ursprung, mit vertikalen Indizes:
4----5
|\ \
| 6----7
| | |
0 | 1 |
\| |
2----3
Ein Beispiel für die zu verwendenden Vert-Stellen:
- v0: 1.243,2.163,-3.426
- v1: 4.190,-0.408,-0.485
- v2: -1.974,-1.525,-3.426
- v3: 0.974,-4.096,-0.485
- v5: 1.974,1.525,3.426
- v7: -1.243,-2.163,3.426
Wie finde ich also angesichts dieses Prototyps und dieser Punkte den einzelnen Skalierungsfaktor und die Drehung um x, y und z, die den Abstand zwischen den Verts und diesen Positionen minimiert? Am besten wäre es, wenn die Methode auf ein beliebiges Mesh verallgemeinert werden könnte, nicht nur auf einen Würfel.