本文整理汇总了C++中eigen::Quaternion::dot方法的典型用法代码示例。如果您正苦于以下问题:C++ Quaternion::dot方法的具体用法?C++ Quaternion::dot怎么用?C++ Quaternion::dot使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类eigen::Quaternion
的用法示例。
在下文中一共展示了Quaternion::dot方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
Eigen::Quaternion<T> naive_slerp(const Eigen::Quaternion<T>& input, const Eigen::Quaternion<T>& target, T amt){
Eigen::Quaternion<T> result;
if (amt==T(0)) {
return input;
} else if (amt==T(1)) {
return target;
}
int bflip = 0;
T dot_prod = input.dot(target);
T a, b;
//clamp
dot_prod = (dot_prod < -1) ? -1 : ((dot_prod > 1) ? 1 : dot_prod);
// if B is on opposite hemisphere from A, use -B instead
if (dot_prod < 0.0) {
dot_prod = -dot_prod;
bflip = 1;
}
T cos_angle = acos(dot_prod);
if(ABS(cos_angle) > QUAT_EPSILON) {
T sine = sin(cos_angle);
T inv_sine = 1./sine;
a = sin(cos_angle*(1.-amt)) * inv_sine;
b = sin(cos_angle*amt) * inv_sine;
if (bflip) { b = -b; }
} else {
// nearly the same;
// approximate without trigonometry
a = amt;
b = 1.-amt;
}
result.w = a*input.w + b*target.w;
result.x = a*input.x + b*target.x;
result.y = a*input.y + b*target.y;
result.z = a*input.z + b*target.z;
result.normalize();
return result;
}