App
TM.java
Go to the documentation of this file.
1 package mhr.appcore.transform;
2 
3 public class TM {
4 
5  double a11, a12, a13;
6  double a21, a22, a23;
7  double a31, a32, a33;
8 
9  public TM() {
10  }
11 
12  public TM(double aa11, double aa12, double aa13, double aa21, double aa22, double aa23, double aa31, double aa32, double aa33) {
13  a11 = aa11;
14  a12 = aa12;
15  a13 = aa13;
16 
17  a21 = aa21;
18  a22 = aa22;
19  a23 = aa23;
20 
21  a31 = aa31;
22  a32 = aa32;
23  a33 = aa33;
24  }
25 
26  public TM(TM other) {
27  a11 = other.a11;
28  a12 = other.a12;
29  a13 = other.a13;
30 
31  a21 = other.a21;
32  a22 = other.a22;
33  a23 = other.a23;
34 
35  a31 = other.a31;
36  a32 = other.a32;
37  a33 = other.a33;
38  }
39 
40  public static TM multiply(TM m1, TM m2) {
41  TM r = new TM();
42 
43  r.a11 = m1.a11 * m2.a11 + m1.a12 * m2.a21 + m1.a13 * m2.a31;
44  r.a12 = m1.a11 * m2.a12 + m1.a12 * m2.a22 + m1.a13 * m2.a32;
45  r.a13 = m1.a11 * m2.a13 + m1.a12 * m2.a23 + m1.a13 * m2.a33;
46 
47  r.a21 = m1.a21 * m2.a11 + m1.a22 * m2.a21 + m1.a23 * m2.a31;
48  r.a22 = m1.a21 * m2.a12 + m1.a22 * m2.a22 + m1.a23 * m2.a32;
49  r.a23 = m1.a21 * m2.a13 + m1.a22 * m2.a23 + m1.a23 * m2.a33;
50 
51  r.a31 = m1.a31 * m2.a11 + m1.a32 * m2.a21 + m1.a33 * m2.a31;
52  r.a32 = m1.a31 * m2.a12 + m1.a32 * m2.a22 + m1.a33 * m2.a32;
53  r.a33 = m1.a31 * m2.a13 + m1.a32 * m2.a23 + m1.a33 * m2.a33;
54 
55  return r;
56  }
57 
58  public static TM inverseOf(TM m) {
59  TM r = new TM();
60 
61  double factor = 1 / (m.a11 * (m.a22 * m.a33 - m.a23 * m.a32) - m.a12 * (m.a21 * m.a33 - m.a23 * m.a31) + m.a13 * (m.a21 * m.a32 - m.a22 * m.a31));
62 
63  r.a11 = (m.a22 * m.a33 - m.a23 * m.a32) * factor;
64  r.a12 = (m.a13 * m.a32 - m.a12 * m.a33) * factor;
65  r.a13 = (m.a12 * m.a23 - m.a13 * m.a22) * factor;
66 
67  r.a21 = (m.a23 * m.a31 - m.a21 * m.a33) * factor;
68  r.a22 = (m.a11 * m.a33 - m.a13 * m.a31) * factor;
69  r.a23 = (m.a13 * m.a21 - m.a11 * m.a23) * factor;
70 
71  r.a31 = (m.a21 * m.a32 - m.a22 * m.a31) * factor;
72  r.a32 = (m.a12 * m.a31 - m.a11 * m.a32) * factor;
73  r.a33 = (m.a11 * m.a22 - m.a12 * m.a21) * factor;
74 
75  return r;
76  }
77 
78  public static TM transposeOf(TM m) {
79  TM r = new TM();
80 
81  r.a11 = m.a11;
82  r.a12 = m.a21;
83  r.a13 = m.a31;
84 
85  r.a21 = m.a12;
86  r.a22 = m.a22;
87  r.a23 = m.a32;
88 
89  r.a31 = m.a13;
90  r.a32 = m.a23;
91  r.a33 = m.a33;
92 
93  return r;
94  }
95 
96  @Override
97  public String toString() {
98  StringBuilder sb = new StringBuilder();
99  sb.append(a11); sb.append('\t');sb.append(a12); sb.append('\t');sb.append(a13); sb.append('\n');
100  sb.append(a21); sb.append('\t');sb.append(a22); sb.append('\t');sb.append(a23); sb.append('\n');
101  sb.append(a31); sb.append('\t');sb.append(a32); sb.append('\t');sb.append(a33); sb.append('\n');
102  return sb.toString();
103  }
104 };