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


C++ Vec3::GetDotProduct方法代码示例

本文整理汇总了C++中Vec3::GetDotProduct方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec3::GetDotProduct方法的具体用法?C++ Vec3::GetDotProduct怎么用?C++ Vec3::GetDotProduct使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Vec3的用法示例。


在下文中一共展示了Vec3::GetDotProduct方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: QuatFromSourceToTarget

Quat QuatFromSourceToTarget( const Vec3& source, const Vec3& target )
{
    Vec3 s = source.GetNormalized();
    Vec3 t = target.GetNormalized();

    Vec3 c = s.GetCrossProduct( t );
    Real d = s.GetDotProduct( t );

    // check if vectors are the same
    if ( Equals( d, Real( 1 ), REAL_EPSILON * 3 ) )
    {
        // set to no rotation and return
        return Quat::ZERO;
    }

    // check for 180 degree rotation
    Real clen = c.GetLength();
    if ( clen <= REAL_EPSILON )
    {
        // pick an axis to rotate around
        Vec3 r = Vec3::UNIT_Y.GetCrossProduct( source );
        Real rlen = r.GetLength();

        if ( rlen <= REAL_EPSILON )
        {
            // bad luck, pick another axis
            r = Vec3::UNIT_X.GetCrossProduct( source );
            rlen = r.GetLength();
        }

        // normalize, set rotation and return
        r /= rlen;
        return QuatFromAxisAngle( r, Radian( REAL_PI ) );
    }

    // normalize c
    c /= clen;

    // get angle and set quaternion
    Real a = acos( d ) * Real( 0.5 );
    Real sa = sin( a );

    return Quat( cos( a ), c.X() * sa, c.Y() * sa, c.Z() * sa );
}
开发者ID:carmichaelong,项目名称:flut,代码行数:44,代码来源:Quat.cpp


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