标题:
真正矩阵的求逆算法
[打印本页]
作者:
天边浮云
时间:
2004-5-10 10:03
标题:
真正矩阵的求逆算法
float Inverse(CLAYMATRIX& mOut, const CLAYMATRIX& rhs)
{
CLAYMATRIX m(rhs);
DWORD is[4];
DWORD js[4];
float fDet = 1.0f;
int f = 1;
for (int k = 0; k < 4; k ++)
{ float fMax = 0.0f;
for (DWORD i = k; i < 4; i ++)
{
for (DWORD j = k; j < 4; j ++)
{
const float f = Abs(m(i, j));
if (f > fMax)
{
fMax = f;
is[k] = i;
js[k] = j;
}
}
}
if (Abs(fMax) < 0.0001f)
return 0;
if (is[k] != k)
{
f = -f;
swap(m(k, 0), m(is[k], 0));
swap(m(k, 1), m(is[k], 1));
swap(m(k, 2), m(is[k], 2));
swap(m(k, 3), m(is[k], 3));
}
if (js[k] != k)
{
f = -f;
swap(m(0, k), m(0, js[k]));
swap(m(1, k), m(1, js[k]));
swap(m(2, k), m(2, js[k]));
swap(m(3, k), m(3, js[k]));
}
fDet *= m(k, k);
m(k, k) = 1.0f / m(k, k);
for (DWORD j = 0; j < 4; j ++)
{
if (j != k)
m(k, j) *= m(k, k);
}
for (DWORD i = 0; i < 4; i ++)
{
if (i != k)
{
for (j = 0; j < 4; j ++)
{
if (j != k)
m(i, j) = m(i, j) - m(i, k) * m(k, j);
}
}
}
for (i = 0; i < 4; i ++)
{
if (i != k)
m(i, k) *= -m(k, k);
}
}
}
for (k = 3; k >= 0; k --)
{
if (js[k] != k)
{
swap(m(k, 0), m(js[k], 0));
swap(m(k, 1), m(js[k], 1));
swap(m(k, 2), m(js[k], 2));
swap(m(k, 3), m(js[k], 3));
}
if (is[k] != k)
{
swap(m(0, k), m(0, is[k]));
swap(m(1, k), m(1, is[k]));
swap(m(2, k), m(2, is[k]));
swap(m(3, k), m(3, is[k]));
}
}
mOut = m;
return fDet * f;
}
复制代码
作者:
bigblock
时间:
2004-5-10 10:48
标题:
真正矩阵的求逆算法
不错.
我喜欢.
作者:
天边浮云
时间:
2004-5-25 12:09
标题:
真正矩阵的求逆算法
好东西居然只有一个人识货
我好伤心
-----------------天边浮云
作者:
风灵风之子
时间:
2004-5-25 12:10
标题:
真正矩阵的求逆算法
呵呵
别伤心
我最近就在为数据结构而烦恼
作者:
天边浮云
时间:
2004-6-5 18:58
标题:
真正矩阵的求逆算法
同意
作者:
慕容豪情
时间:
2004-6-5 19:19
标题:
真正矩阵的求逆算法
不错~
很经典~~
作者:
天边浮云
时间:
2004-6-7 21:57
标题:
真正矩阵的求逆算法
可是没多少人懂
我对这个只是了解那么一点
很想找个人或者几个人讨论一下
居然没有人知道
遗憾呀
-------------天边浮云
作者:
入夜蝴蝶
时间:
2004-7-8 10:56
标题:
真正矩阵的求逆算法
慢慢来啃
欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/)
Powered by Discuz! 7.2