home *** CD-ROM | disk | FTP | other *** search
- /*
- * supportive subroutines...
- */
-
- #include <math.h>
- #include <stdio.h>
- #include "MyMath.h"
- #include "rtd.h"
- #include "extern.h"
-
-
- mt (vec, trans)/* make a transpose matrix according to arcane laws
- hidden in a linear algebra book plus a lot of my own
- sweat. (if you reaaly wanna know, rotate around y axis,
- then z axis.) */
- register struct vector *vec;
- register struct mat *trans;
- {
- if ( SPTst(vec -> xzl) == 0 ) {
- trans -> x.x = SPFlt(0);
- trans -> x.y = SPFlt(1);
- trans -> x.z = SPFlt(0);
- trans -> y.x = SPFlt(-1);
- trans -> y.y = SPFlt(0);
- trans -> y.z = SPFlt(0);
- trans -> z.x = SPFlt(0);
- trans -> z.y = SPFlt(0);
- trans -> z.z = SPFlt(1);
- } else {
- trans -> x.x = SPDiv( (vec -> l), (vec -> x) );
- trans -> x.y = SPDiv( (vec -> l), (vec -> y) );
- trans -> x.z = SPDiv( (vec -> l), (vec -> z) );
-
- trans -> y.x = SPDiv(
- SPMul(
- (vec -> l),
- (vec -> xzl)
- ),
- SPMul(
- SPNeg(vec -> x),
- (vec -> y)
- )
- );
- trans -> y.y = SPDiv( (vec -> l), (vec -> xzl) );
- trans -> y.z = SPDiv(
- SPMul(
- (vec -> l),
- (vec -> xzl)
- ),
- SPMul(
- SPNeg(vec -> z),
- (vec -> y)
- )
- );
-
- trans -> z.x = SPDiv( (vec -> xzl), SPNeg(vec -> z) );
- trans -> z.y = SPFlt(0);
- trans -> z.z = SPDiv( (vec -> xzl), (vec -> x) );
- }
- }
-