本文整理汇总了C++中quaternion::Dot方法的典型用法代码示例。如果您正苦于以下问题:C++ quaternion::Dot方法的具体用法?C++ quaternion::Dot怎么用?C++ quaternion::Dot使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类quaternion
的用法示例。
在下文中一共展示了quaternion::Dot方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SlerpExtraSpins
quaternion quaternion::SlerpExtraSpins(real fT, const quaternion& rkP, const quaternion& rkQ, int iExtraSpins)
{
real fCos = rkP.Dot(rkQ);
real fAngle (math::acos(fCos) );
if (math::abs(fAngle) < msEpsilon )
return rkP;
real fSin = math::sin(fAngle);
real fPhase ( math::pi*iExtraSpins*fT );
real fInvSin = 1.0f/fSin;
real fCoeff0 = math::sin((1.0f-fT)*fAngle - fPhase)*fInvSin;
real fCoeff1 = math::sin(fT*fAngle + fPhase)*fInvSin;
return fCoeff0*rkP + fCoeff1*rkQ;
}
示例2: nlerp
quaternion quaternion::nlerp(real fT, const quaternion &rkP, const quaternion &rkQ, bool shortestPath)
{
quaternion result;
real fCos = rkP.Dot(rkQ);
if (fCos < 0.0f && shortestPath)
{
result = rkP + fT * ((-rkQ) - rkP);
}
else
{
result = rkP + fT * (rkQ - rkP);
}
result.normalise();
return result;
}
示例3: Slerp
quaternion quaternion::Slerp(real fT, const quaternion &rkP, const quaternion &rkQ, bool shortestPath)
{
real fCos = rkP.Dot(rkQ);
quaternion rkT;
// Do we need to invert rotation?
if (fCos < 0.0f && shortestPath)
{
fCos = -fCos;
rkT = -rkQ;
}
else
{
rkT = rkQ;
}
if (math::abs(fCos) < 1 - msEpsilon)
{
// Standard case (slerp)
real fSin = math::sqrt(1 - fCos*fCos);
real fAngle = math::atan2(fSin, fCos);
real fInvSin = 1.0f / fSin;
real fCoeff0 = math::sin((1.0f - fT) * fAngle) * fInvSin;
real fCoeff1 = math::sin(fT * fAngle) * fInvSin;
return fCoeff0 * rkP + fCoeff1 * rkT;
}
else
{
// There are two situations:
// 1. "rkP" and "rkQ" are very close (fCos ~= +1), so we can do a linear
// interpolation safely.
// 2. "rkP" and "rkQ" are almost inverse of each other (fCos ~= -1), there
// are an infinite number of possibilities interpolation. but we haven't
// have method to fix this case, so just use linear interpolation here.
quaternion t = (1.0f - fT) * rkP + fT * rkT;
// taking the complement requires renormalisation
t.normalise();
return t;
}
}