2013年12月5日星期四(数学)
来源:互联网 发布:工商数据采集工具 编辑:程序博客网 时间:2024/05/17 03:03
暂时绕过浮点数等优化,直接看如何求解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就结束了,数学引擎这边再看下有什么需要补充的。
- 2013年12月5日星期四(数学)
- 2011年12月15日星期四(oracle读书笔记)
- 2011年12月22日 星期四(oracle读书笔记)
- 2013年9月26日星期四
- 2007年4月12日 星期四
- 2009年2月12日星期四
- 2009年2月12日星期四
- 2009年2月12日星期四
- 2014年2月20日星期四(DEMO7-5)
- 2007年5月10日 星期四
- 2007年5月17日 星期四
- 2007年5月24日 星期四
- 2007年5月31日 星期四
- 2012年1月5日星期四
- 2013年9月5日星期四(8-5,缩放)
- 2013年11月21日星期四(地图)
- 2006年1月12日 星期四 阴
- 2008年10月23日(星期四)作业
- 人人code,整数取反
- 坑爹的工行Chrome网银插件
- 软件工程之软件维护
- 2013年11月26日星期二(四元数)
- Exercise 5.8
- 2013年12月5日星期四(数学)
- 2013年12月20日星期五(7_0,16位窗口模式)
- c学生管理系统v5.0总结
- Exercise 5.9
- 2013年12月20日星期五(7——1,绘制三角线框)
- Sample 6.1:if.cpp
- 45 java static 关键字
- 闲时,读一本和技术无关的书!!!
- Dispose 模式