四元素取逆-Quaternion Inverse - 已验证

四元素取逆其实就是xyz的值分别取反

q = {x,y,z,w}

q_inverse = {-x,-y,-z ,w}


同时旋转矩阵取逆的方法如下:

// float mat[3][3] = { 00 01 02
//                     10 11 12
//                     20 21 22
//                    }

float m3_det2( float mat[3][3])
{
    float det;
    det = mat[0][0] * ( mat[1][1]*mat[2][2] - mat[1][2]*mat[2][1] )
    - mat[1][0] * ( mat[0][1]*mat[2][2] - mat[0][2]*mat[2][1] )
    + mat[2][0] * ( mat[0][1]*mat[1][2] - mat[0][2]*mat[1][1] );
    return( det );
}

int m3_inverse2( float mr[3][3], float ma[3][3] )
{
    float det = m3_det2( ma );
    if ( fabs( det ) < 0.0005 )
    {
        
        //        m3_identity( mr );
        return(0);
    }
    
    mr[0][0] =    ma[1][1]*ma[2][2] - ma[2][1]*ma[1][2]   / det;
    mr[1][0] = -( ma[1][0]*ma[2][2] - ma[1][2]*ma[2][0] ) / det;
    mr[2][0] =    ma[1][0]*ma[2][1] - ma[1][1]*ma[2][0]   / det;
    
    mr[0][1] = -( ma[0][1]*ma[2][2] - ma[2][1]*ma[0][2] ) / det;
    mr[1][1] =    ma[0][0]*ma[2][2] - ma[0][2]*ma[2][0]   / det;
    
    mr[2][1] = -( ma[0][0]*ma[2][1] - ma[0][1]*ma[2][0] ) / det;
    
    mr[0][2] =    ma[0][1]*ma[1][2] - ma[0][2]*ma[1][1]   / det;
    
    mr[1][2] = -( ma[0][0]*ma[1][2] - ma[0][2]*ma[1][0] ) / det;
    
    mr[2][2] =    ma[0][0]*ma[1][1] - ma[1][0]*ma[0][1]   / det;
    return(1);
}
把上面的旋转矩阵取逆后再转换成四元素与四元素直接取逆得到的值一致。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值