Я предполагаю, что положение ваших точек относительно исходной матрицы, которую, как вы говорите, можно перевести / повернуть.
Предполагая, что все это необходимо, новые позиции ваших точек определяются как:
pos_newCoord = R^-1 * T^-1 * pos_oldCoord
То, что вы делаете, это то, что вы берете свое новое происхождение, переводите его обратно в старое и убираете его.Написано по-другому:
newOrigin = myTranslation(myRotation(oldOrigin))
def newCoordinates(point):
return inverse(myRotation)(inverse(myTranslation)(point))
Вы можете предварительно рассчитать обратные операции, особенно если вы используете 4d матрицы.
" как определить изменение ввращение и перевод для источника, основанного на изменениях вращения и перевода для камер?"–OP
Если вам не сообщили эту информацию, вы можете восстановить ее следующим образом.Мы будем использовать 4d точки и матрицу аффинного преобразования 4v4 (en.wikipedia.org/wiki/Affine_transformation).
- Взять любые 4 камеры.
- Рассмотрим оригинальную камеруточки против их переведенных / повернутых точек.
- Возможно, есть лучший способ сделать это с помощью линейной алгебры, но если вы перейдете по ссылке на Википедию, мы заметим, что есть подматрица 3x3 A и подматрица 3x1 b и, следовательно, 12 неизвестных.4 балла с 3 уравнениями в каждой дают 12 уравнений.Есть решение, потому что матрицы этой формы обратимы *.Решите, используя ваш любимый метод решения системы линейных уравнений, например, исключение Гаусса на матрице 12x12.