Я звоню slerp()
из Собственной библиотеки следующим образом:
Eigen::MatrixXf Rtime = (Eigen::Quaternionf::Identity().slerp(timer, quarts[i])).toRotationMatrix();
, где timer
- это число с плавающей запятой, а кварты объявляются как
std::vector<Eigen::Quaternionf> quarts;
Этот вызов slerp иногда вызывает Нарушение прав чтения (примерно в 50% случаев), что меня смущает.
Глядя на кадр стека,
Я вижу, что код достигает Eigen::internal::pload
, пока не сломается.
Обычно я думаю, что мои индексы неверны, но он падает, даже когда
i = 0
и quarts.size() = 1
. Я объявляю единственный кватернион в векторе:
Eigen::Matrix3f rotMatrix;
rotMatrix = U * V;
Eigen::Quaternionf temp;
temp = rotMatrix;
quarts.push_back(temp);
где U
и V
получены из вычисления разложения по сингулярным значениям, так что, может быть, что-то не так с тем, как я объявляю кватернион? Или хранение в векторе каким-то образом влияет на это? Я не уверен.