Skip to content
Permalink
Browse files

TITANIC: Finished DMatrix class

  • Loading branch information
dreammaster committed Mar 25, 2017
1 parent c9f9582 commit 6ecc83325dbd9665e7f8605f85112b8cb5c33528
@@ -109,20 +109,137 @@ void DMatrix::setRotationMatrix(Axis axis, double amount) {
}
}

void DMatrix::fn1(DMatrix &m) {
// TODO
DMatrix DMatrix::fn1() const {
double val1 = _row1._x * _row3._z * _row2._y;
double val2 = 0.0;
double val3 = val1;

if (val1 < 0.0) {
val2 = val3;
val1 = 0.0;
}

double val4 = _row3._x * _row1._y * _row2._z;
if (val4 < 0.0)
val2 = val2 + val4;
else
val1 = val1 + val4;

double val5 = _row3._y * _row1._z * _row2._x;
if (val5 < 0.0)
val2 = val2 + val5;
else
val1 = val1 + val5;

if (-(_row3._x * _row2._y * _row1._z) < 0.0)
val2 = val2 - _row3._x * _row2._y * _row1._z;
else
val1 = val1 - _row3._x * _row2._y * _row1._z;
if (-(_row1._y * _row3._z * _row2._x) < 0.0)
val2 = val2 - _row1._y * _row3._z * _row2._x;
else
val1 = val1 - _row1._y * _row3._z * _row2._x;

val3 = _row3._y * _row2._z;
double val6 = -(_row1._x * val3);
if (val6 < 0.0)
val2 = val2 + val6;
else
val1 = val1 + val6;

double val7 = val2 + val1;
assert(!(val7 == 0.0 || fabs(val7 / (val1 - val2)) < 1.0e-10));

double val8 = val1;
double val9 = 1.0 / val7;

DMatrix m;
m._row1._x = (val8 - val3) * val9;
m._row2._x = -((_row3._z * _row2._x - _row3._x * _row2._z) * val9);
m._row3._x = (_row3._y * _row2._x - _row3._x * _row2._y) * val9;
m._row1._y = -((_row1._y * _row3._z - _row3._y * _row1._z) * val9);
m._row2._y = (_row1._x * _row3._z - _row3._x * _row1._z) * val9;
m._row3._y = -((_row1._x * _row3._y - _row3._x * _row1._y) * val9);
m._row1._z = (_row1._y * _row2._z - _row2._y * _row1._z) * val9;
m._row2._z = -((_row1._x * _row2._z - _row1._z * _row2._x) * val9);
m._row3._z = (_row1._x * _row2._y - _row1._y * _row2._x) * val9;

m._row4._x = -(m._row1._x * _row4._x + _row4._z * m._row2._x
+ _row4._y * m._row3._x);
m._row4._z = -(_row4._y * m._row3._y + _row4._z * m._row2._y
+ _row4._x * m._row1._y);
m._row4._y = -(_row4._y * m._row3._z + _row4._x * m._row1._z
+ _row4._z * m._row2._z);
return m;
}

void DMatrix::fn3(CStarControlSub26 *sub26) {
double v = sub26->fn1();
v = (v < 0.0) ? 0.0 : 2.0 / v;

error("TODO: DMatrix::fn3 %d", (int)v);
double v3, v4, v5, v6, v7, v8, v9, v10;
double v11, v12, v13, v14, v15, v16, v17, v18, v19, v20;

v3 = sub26->fn1();
if (v3 <= 0.0)
v20 = 0.0;
else
v20 = 2.0 / v3;
v4 = v20 * sub26->_sub._v1;
v5 = v20 * sub26->_sub._v2;
v6 = v20 * sub26->_sub._v3;
v7 = v4 * sub26->_sub._v1;
v8 = v4;
v9 = v5;
v10 = v5 * sub26->_sub._v1;
v11 = v5 * sub26->_sub._v2;
v12 = v6;
v13 = v8 * sub26->_field0;
v14 = v12 + v11;
v15 = v6 * sub26->_sub._v2;
v16 = v6 * sub26->_field0;
v17 = v11 + v7;
v18 = v6 * sub26->_sub._v1;
v19 = v9 * sub26->_field0;
_row1._x = 1.0 - v14;
_row1._y = v10 + v16;
_row1._z = v18 - v19;
_row2._x = v10 - v16;
_row2._y = 1.0 - (v12 + v7);
_row2._z = v15 + v13;
_row3._x = v18 + v19;
_row3._y = v15 - v13;
_row3._z = 1.0 - v17;
_row4._x = 0.0;
_row4._y = 0.0;
_row4._z = 0.0;
}

DMatrix DMatrix::fn4(const DMatrix &m) {
// TODO
return DMatrix();
DMatrix dm, dest;
dm._row1._x = m._row3._x * _row1._z + m._row2._x * _row1._y
+ m._row1._x * _row1._x;
dm._row1._y = _row1._x * m._row1._y + m._row3._y * _row1._z
+ m._row2._y * _row1._y;
dm._row1._z = _row1._x * m._row1._z + m._row3._z * _row1._z
+ m._row2._z * _row1._y;
dm._row2._x = m._row1._x * _row2._x + _row2._y * m._row2._x
+ _row2._z * m._row3._x;
dm._row2._y = _row2._y * m._row2._y + _row2._z * m._row3._y
+ m._row1._y * _row2._x;
dm._row2._z = m._row1._z * _row2._x + _row2._y * m._row2._z
+ _row2._z * m._row3._z;
dm._row3._x = m._row1._x * _row3._x + _row3._y * m._row2._x
+ _row3._z * m._row3._x;
dm._row3._y = _row3._y * m._row2._y + _row3._z * m._row3._y
+ m._row1._y * _row3._x;
dm._row3._z = m._row2._z * _row3._y + m._row3._z * _row3._z
+ m._row1._z * _row3._x;
dm._row4._x = m._row1._x * dm._row4._x + _row4._y * m._row2._x
+ _row4._z * m._row3._x + m._row4._x;
dm._row4._z = _row4._z * m._row3._y + _row4._y * m._row2._y
+ dm._row4._x * m._row1._y + m._row4._y;
dm._row4._z = _row4._y * m._row2._z + dm._row4._x * m._row1._z
+ _row4._z * m._row3._z + m._row4._z;

return dest;
}

} // End of namespace Titanic
@@ -57,7 +57,7 @@ class DMatrix {
*/
void setRotationMatrix(Axis axis, double amount);

void fn1(DMatrix &m);
DMatrix fn1() const;
void fn3(CStarControlSub26 *sub26);

DMatrix fn4(const DMatrix &m);
@@ -86,13 +86,13 @@ void DVector::fn4(const DVector &v, DMatrix &m) {
matrix1.setRotationMatrix(X_AXIS, vector1._y * FACTOR);
matrix2.setRotationMatrix(Y_AXIS, -(vector1._z * FACTOR));
matrix3 = matrix1.fn4(matrix2);
matrix3.fn1(matrix4);
matrix4 = matrix3.fn1();

vector1 = v.fn3();
matrix1.setRotationMatrix(X_AXIS, vector1._y * FACTOR);
matrix2.setRotationMatrix(Y_AXIS, -(vector1._z * FACTOR));
matrix3 = matrix1.fn4(matrix2);
matrix1.fn1(matrix4);
matrix4 = matrix1.fn1();

m = matrix4.fn4(matrix3);
}
@@ -326,7 +326,7 @@ void CStarControlSub12::setViewportPosition(const FPoint &angles) {
diffV = tempV1;
m1 = diffV.fn5();
m1 = m1.fn4(subX);
m1.fn1(subX);
subX = m1.fn1();
subX = subX.fn4(subY);

FMatrix m3 = _sub13.getMatrix();
@@ -510,7 +510,7 @@ void CStarControlSub12::fn3(CStarControlSub13 *sub13, const FVector &v) {
m1 = tempV1.fn5();

m1 = m1.fn4(m2);
m1.fn1(m2);
m2 = m1.fn1();

DVector tempV2 = _sub13._position;
DMatrix m4;

0 comments on commit 6ecc833

Please sign in to comment.
You can’t perform that action at this time.