Я пытаюсь реализовать шаблонизатор геометрии. Одной из частей является создание прототипа полигональной сетки и выравнивание экземпляров с некоторыми точками в более крупном объекте.
Таким образом, проблема заключается в следующем: учитывая положение точек в 3d для некоторых (возможно, всех) вершин в многоугольной сетке, найдите масштабированное вращение, которое минимизирует разницу между преобразованными вершинами и заданными точками. У меня также есть центральная точка, которая может оставаться неизменной, если это поможет. Соответствие между вертами и 3d локациями фиксировано.
Я думаю, что это можно сделать, решив коэффициенты матрицы преобразования, но я немного не уверен, как построить систему для решения.
Примером этого является куб. Прототипом будет единичный куб с центром в начале координат с индексами вершин:
4----5
|\ \
| 6----7
| | |
0 | 1 |
\| |
2----3
Пример расположения вертов для подгонки:
- 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
Итак, учитывая этот прототип и эти точки, как мне найти единичный масштабный коэффициент и вращение вокруг x, y и z, которое минимизирует расстояние между вершинами и этими позициями? Лучше всего, чтобы метод был обобщен для произвольной сетки, а не только для куба.