Я сделал странное наблюдение, и я спрашиваю себя, есть ли у кого-то объяснения.Каноническая поза PointCloud
Предположим, что у нас есть PointCloud, например идеальный цилиндр. Этот цилиндр каким-то образом размещен и повернут в пространстве. Теперь для этого цилиндра мы вычисляем его центроид и собственные векторы с анализом главных компонент.
Теперь я могу описать это позой как аффинное преобразование вида:
Eigen::Affine3d pose;
pose.translation << centroid[0], centroid[1], centroid[2];
pose.linear() = evecs;
Теперь давайте предположим, что я хочу, чтобы преобразовать объект в его недвусмысленная, каноническая позе, то я хотел бы сделать следующее:
obj.transform(obj.getPose().inverse());
Под этим я бы превратил объект в его локальную систему координат и, следовательно, это каноническая поза. И obj.getPose()
создаст мне новую позу, опять же после пересчета новых собственных векторов и положения центра тяжести (которые тогда должны быть в (0,0,0)).
После того как я сделал это, однако в конечном итоге новая, каноническая поза объекта иногда это:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Таким образом, единичной матрице. Я ожидал бы это, но иногда я получил это:
-1 0 0 0
0 -1 0 0
0 0 1 0
0 0 0 1
Я не могу объяснить это поведение для себя, и я это вызывает проблемы для меня, как я сравниваю позах. У вас есть идея, почему это происходит?
Да, у меня был более глубокий вид, и вы правы. Правильно ли можно просто назначить Identity-Matrix после преобразования в канонической позе? Чтобы избавиться от этой проблемы? – Chris
да конечно! Но в более общем случае, когда вы хотите сравнить две позы, вы должны быть осторожны с вышеупомянутыми двусмысленностями. – ggael