四元数的球面差值 ogre

13 篇文章 3 订阅
对四元数进行球面插值运算,t>0&&t<1
    Quaternion InterQua(Quaternion from,Quaternion to,float t)
    {
        if (t>=1)
        {
            t=0.9999;
        }
        else if (t<=0)
        {
            t=0.00001;
        }
        //计算开始方位和结束方位的点积 
        double cosO=from.Dot(to);
        if(cosO<0){ 
            from=-from;
            cosO=cosO; 
        } 
        //进行插值运算 
        double kO,kl; 
        if(cosO>0.9999){ 
            kO=1-t; 
            kl=t; 
        }else{ 
            double sinO=Ogre::Math::Sqrt(1-Ogre::Math::Pow(cosO,2)); 
            double o=(Ogre::Math::ATan2(sinO,cosO)).valueRadians(); 
            float one=1.00/sinO; 
            kO=Ogre::Math::Sin((1-t)*o)*one; 
            kl=Ogre::Math::Sin(t*o)*one; 
        } 
        //输出在t参数下的插值结果          
        Quaternion qua=Quaternion::ZERO;

        qua=from*kO+to*kl;
        return qua;

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思依_xuni

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值