Я пытаюсь найти матрицы преобразования между разными системами координат. Чтобы повернуть, мы в основном умножаем матрицы вращения и добавляем вектор перемещения, чтобы получить окончательную однородную матрицу.
Здесь я прикрепил фрагмент моего кода, где tf_matrix
и output
равны Eigen::Transform
переменные.
tf_matrix.setIdentity();
tf_matrix.rotate( output.rotation() );
tf_matrix.translate( output.translation() );
Когда я смотрю на их результаты, мне кажется, что он генерирует матрицу вращения и трансляции в матрицы 4x4 и умножает ее вместо добавления вектора трансляции
Вывод:
//This is rotation matrix
output.rotation()
1 0 0
0 0.0707372 -0.997495
0 0.997495 0.0707372
//translation vector
output.translation()
0.3
0.3
0.3
//After applying rotate() and translate() tf_matrix.transform.matrix() looks like the below
1 0 0 0.3
0 0.0707372 -0.997495 -0.278027
0 0.997495 0.0707372 0.32047
0 0 0 1
//Printing just the tf_matrix.transform.rotation()
1 0 0
0 0.0707372 -0.997495
0 0.997495 0.0707372
//Printing just the tf_matrix.transform.translation()
0.3
-0.278027
0.32047
//Ideally it should look like the below
1 0 0 0.3
0 0.0707372 -0.997495 0.3
0 0.997495 0.0707372 0.3
0 0 0 1
Что я пробовал
- Я попытался сгенерировать простую идентичность 4x4 Eigen :: Trnasform и добавить ее в выходная матрица после поворота, но добавляется значение 1 единичной матрицы
- Я также пробовал, умножить tf_matrix.col (3) + = output_matrix.col (3), но он сталкивается с аналогичными проблемами, как указано выше.
Я не уверен, как go о вращении, потому что я понимаю, что мне нужно просто умножить матрицу вращения 3x3 и добавить / добавить вектор трансляции 3x3 к последний столбец этой матрицы. Похоже, что Эйген сможет справиться с этим без написания лишнего кода. Но этот поворот, перевод явно не дает правильных ответов.
Не могли бы вы указать, чего мне не хватает, если таковые имеются, или есть ли лучший способ go об этом.