diff options
author | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-04-08 16:46:21 +0200 |
---|---|---|
committer | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-04-08 16:46:21 +0200 |
commit | 7a63472ea29db5d7555016d98e6a45c48fbf3157 (patch) | |
tree | a498100dc67a06cf5aca46c2abc7f80be5c5506e /hcoord.cpp | |
parent | f281f316627b163489ecb39d837144142c9353f9 (diff) |
Reimplemented matrix inversion.
Diffstat (limited to 'hcoord.cpp')
-rw-r--r-- | hcoord.cpp | 45 |
1 files changed, 42 insertions, 3 deletions
@@ -1,6 +1,5 @@ #include "hcoord.h" #include <SDL/SDL_opengl.h> -#include <AR/ar.h> HVector::HVector() { w = 1.0; @@ -18,9 +17,49 @@ HMatrix::HMatrix() { m[3][3] = 1.0; } -HMatrix HMatrix::inverse() { +HMatrix HMatrix::invtr() { HMatrix res; - arUtilMatInv(m, res.m); + + res.m[0][0] = m[0][0]; + res.m[0][1] = m[1][0]; + res.m[0][2] = m[2][0]; + + res.m[1][0] = m[0][1]; + res.m[1][1] = m[1][1]; + res.m[1][2] = m[2][1]; + + res.m[2][0] = m[0][2]; + res.m[2][1] = m[1][2]; + res.m[2][2] = m[2][2]; + + res.m[0][3] = - res.m[0][0] * m[0][3] - res.m[0][1] * m[1][3] - res.m[0][2] * m[2][3]; + res.m[1][3] = - res.m[1][0] * m[0][3] - res.m[1][1] * m[1][3] - res.m[1][2] * m[2][3]; + res.m[2][3] = - res.m[2][0] * m[0][3] - res.m[2][1] * m[1][3] - res.m[2][2] * m[2][3]; + + return res; +} + +HMatrix HMatrix::invtrs() { + HMatrix res; + + double s = 1 / (m[0][0] * m[0][0] + m[0][1] * m[0][1] + m[0][2] * m[0][2]); + + res.m[0][0] = s * m[0][0]; + res.m[0][1] = s * m[1][0]; + res.m[0][2] = s * m[2][0]; + + res.m[1][0] = s * m[0][1]; + res.m[1][1] = s * m[1][1]; + res.m[1][2] = s * m[2][1]; + + res.m[2][0] = s * m[0][2]; + res.m[2][1] = s * m[1][2]; + res.m[2][2] = s * m[2][2]; + + res.m[0][3] = - res.m[0][0] * m[0][3] - res.m[0][1] * m[1][3] - res.m[0][2] * m[2][3]; + res.m[1][3] = - res.m[1][0] * m[0][3] - res.m[1][1] * m[1][3] - res.m[1][2] * m[2][3]; + res.m[2][3] = - res.m[2][0] * m[0][3] - res.m[2][1] * m[1][3] - res.m[2][2] * m[2][3]; + return res; } |