当前位置: 首页>>代码示例>>C++>>正文


C++ quaternion::Dot方法代码示例

本文整理汇总了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;
}
开发者ID:euseibus,项目名称:voxelTerrain,代码行数:15,代码来源:quaternion.cpp

示例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;
}
开发者ID:euseibus,项目名称:voxelTerrain,代码行数:15,代码来源:quaternion.cpp

示例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;
    }
}
开发者ID:euseibus,项目名称:voxelTerrain,代码行数:40,代码来源:quaternion.cpp


注:本文中的quaternion::Dot方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。