2013年12月5日星期四(数学)

暂时绕过浮点数等优化,直接看如何求解A*X=B,只需提供的是系数矩阵A和常量矩阵B,

先求A的行列式

 

float ddraw_math::Mat_Det_2X2(MATRIX2X2_PTR m)

{

    return ( m->M00 * m->M11 - m->M01 * m->M10 );

}

 

将A复制到工作矩阵中

void ddraw_math::MAT_COPY_2X2( MATRIX2X2_PTR src_mat, MATRIX2X2_PTR dest_mat )

{

    memcpy( ( void * ) ( dest_mat ), ( void * ) ( src_mat ), sizeof( MATRIX2X2 ) );

}

求解

int ddraw_math::Solve_2X2_System(MATRIX2X2_PTR A, MATRIX1X2_PTR X, MATRIX1X2_PTR B)

{

    float             det_A                 = Mat_Det_2X2( A );

 

    if( fabs( det_A ) < EPSILON_E5 )

         return ( 0 );

 

    MATRIX2X2         work_mat;

    MAT_COPY_2X2( A, & work_mat );

    MAT_COLUMN_SWAP_2X2( & work_mat, 0, B );

 

    float             det_ABx               = Mat_Det_2X2( & work_mat );

 

    X->M00                                 = det_ABx / det_A;

 

    MAT_COPY_2X2( A, & work_mat );

    MAT_COLUMN_SWAP_2X2( & work_mat, 1, B );

 

    float             det_ABy               = Mat_Det_2X2( & work_mat );

    X->M01                                 = det_ABy / det_A;

 

    return ( 1 );

 

}

 

同样,对于3X3来说,float ddraw_math::Mat_Det_3X3(MATRIX3X3_PTR m)

{

    return ( m->M00 * ( m->M11 * m->M22 - m->M21 * m->M12 ) -

                  m->M01 * ( m->M10 * m->M22 - m->M20 * m->M12 ) +

                  m->M02 * ( m->M10 * m->M21 - m->M20 * m->M11 ) );

}

 

到此,这几个DEMO就结束了,数学引擎这边再看下有什么需要补充的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值