Собственное произведение нулевого кватерниона и любого вектора не равно нулю, это ошибка? - PullRequest
2 голосов
/ 14 января 2020

Я использую Eigen 3.3.7 и его кватернионы для выполнения преобразований на множестве векторов.

Мне нужно было выполнить произведение кватерниона (это может быть нулевой кватернион) с вектором , Проблема заключается в том, что когда кватернион равен нулю кватерниона (нулевая действительная и векторная части), возвращаемое значение является самим вектором.

Что я понял из определения произведения Гамильтона, так это то, что, если кватернион является нулевым кватернионом, произведение должно возвращать нулевой вектор. Я ошибаюсь?

Следующий фрагмент показывает проблему, я ожидал, что вектор sv будет нулевым, но это не так. Это ошибка?

Eigen::Quaterniond q{0.0, 0.0, 0.0, 0.0};
Eigen::Vector3d v{1.0, 2.0, 3.0};
auto sv = q * v;

Приветствия и спасибо.

1 Ответ

2 голосов
/ 15 января 2020

Я должен признать, что до c этого operator* не кристально чист, но семантически эквивалентно:

q.toRotationMatrix() * v

, потому что Eigen::Quaternion был разработан, чтобы представлять только вращение. В вашем случае, поскольку нулевой кватернион q не является унитарным, он не представляет никакого поворота, а возвращаемое значение не определено.

См. bug 560 для получения дополнительной информации и обсуждений.

...