-
Notifications
You must be signed in to change notification settings - Fork 0
/
lib_matrix.nolol
139 lines (118 loc) · 3.84 KB
/
lib_matrix.nolol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
macro matrix4_mul(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33, i00, i01, i02, i03, i10, i11, i12, i13, i20, i21, i22, i23, i30, i31, i32, i33) block
end
macro matrix4_det(det, i00, i01, i02, i03, i10, i11, i12, i13, i20, i21, i22, i23, i30, i31, i32, i33) block
s0=i00*i11-i10*i01
s1=i00*i12-i10*i02
s2=i00*i13-i10*i03
s3=i01*i12-i11*i02
s4=i01*i13-i11*i03
s5=i02*i13-i12*i03
c5=i22*i33-i32*i23
c4=i21*i33-i31*i23
c3=i21*i32-i31*i22
c2=i20*i33-i30*i23
c1=i20*i32-i30*i22
c0=i20*i31-i30*i21
det=s0*c5-s1*c4+s2*c3+s3*c2-s4*c1+s5*c0
end
macro matrix4_cpy(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33, i00, i01, i02, i03, i10, i11, i12, i13, i20, i21, i22, i23, i30, i31, i32, i33) block
m00=i00
m01=i01
m02=i02
m03=i03
m10=i10
m11=i11
m12=i12
m13=i13
m20=i20
m21=i21
m22=i22
m23=i23
m30=i30
m31=i31
m32=i32
m33=i33
end
macro matrix4_inv(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33, i00, i01, i02, i03, i10, i11, i12, i13, i20, i21, i22, i23, i30, i31, i32, i33) block
s0=i00*i11-i10*i01
s1=i00*i12-i10*i02
s2=i00*i13-i10*i03
s3=i01*i12-i11*i02
s4=i01*i13-i11*i03
s5=i02*i13-i12*i03
c5=i22*i33-i32*i23
c4=i21*i33-i31*i23
c3=i21*i32-i31*i22
c2=i20*i33-i30*i23
c1=i20*i32-i30*i22
c0=i20*i31-i30*i21
det=s0*c5-s1*c4+s2*c3+s3*c2-s4*c1+s5*c0
m00=(i11*c5-i12*c4+i13*c3)/det
m01=(-i01*c5+i02*c4-i03*c3)/det
m02=(i31*s5-i32*s4+i33*s3)/det
m03=(-i21*s5+i22*s4-i23*s3)/det
m10=(-i10*c5+i12*c2-i13*c1)/det
m11=(i00*c5-i02*c2+i03*c1)/det
m12=(-i30*s5+i32*s2-i33*s1)/det
m13=(i20*s5-i22*s2+i23*s1)/det
m20=(i10*c4-i11*c2+i13*c0)/det
m21=(-i00*c4+i01*c2-i03*c0)/det
m22=(i30*s4-i31*s2+i33*s0)/det
m23=(-i20*s4+i21*s2-i23*s0)/det
m30=(-i10*c3+i11*c1-i12*c0)/det
m31=(i00*c3-i01*c1+i02*c0)/det
m32=(-i30*s3+i31*s1-i32*s0)/det
m33=(i20*s3-i21*s1+i22*s0)/det
end
//matrix4_det(det, m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44)
//matrix4_inverse(m11,m12,m13,m14,m21,m22,m23,m24,m31,m32,m33,m34,m41,m42,m43,m44,i11,i12,i13,i14,i21,i22,i23,i24,i31,i32,i33,i34,i41,i42,i43,i44)
//matrix4_copy(m11,m12,m13,m14,m21,m22,m23,m24,m31,m32,m33,m34,m41,m42,m43,m44,i11,i12,i13,i14,i21,i22,i23,i24,i31,i32,i33,i34,i41,i42,i43,i44)
// ClearAll[var]
// var[var_]:= Function[cord,symbol@StringRiffle[{var,cord},""]]
// l=Array[StringTemplate["l````"],{3,3}];
// r=Array[StringTemplate["r````"],{3,3}];
// o=Array[StringTemplate["o````"],{3,3}];
// symbol=StringTemplate["``"];
// set=StringTemplate["``=``"];
// times=StringTemplate["``*``"];
// plus=StringTemplate["``+``"];
// MapThread[set,{Flatten[o],Flatten[l.r/.{Times->times,Plus->plus}]}];
// StringRiffle[%,"\n"]
macro matrix3_mul(o11, o12, o13, o21, o22, o23, o31, o32, o33, l11, l12, l13, l21, l22, l23, l31, l32, l33, r11, r12, r13, r21, r22, r23, r31, r32, r33) block
o11=l11*r11+l12*r21
o12=l11*r12+l12*r22
o13=l11*r13+l12*r23
o21=l21*r11+l22*r21
o22=l21*r12+l22*r22
o23=l21*r13+l22*r23
o31=l31*r11+l32*r21
o32=l31*r12+l32*r22
o33=l31*r13+l32*r23
end
macro matrix3_det(det, m11, m12, m13, m21, m22, m23, m31, m32, m33) block
det=-m13*m22*m31+m12*m23*m31+m13*m21*m32-m11*m23*m32-m12*m21*m33+m11*m22*m33
end
macro matrix3_cpy(o11, o12, o13, o21, o22, o23, o31, o32, o33, m11, m12, m13, m21, m22, m23, m31, m32, m33) block
o11=m11
o12=m12
o13=m13
o21=m21
o22=m22
o23=m23
o31=m31
o32=m32
o33=m33
end
macro matrix3_inv(o11, o12, o13, o21, o22, o23, o31, o32, o33, m11, m12, m13, m21, m22, m23, m31, m32, m33) block
matrix3_det(det,m11,m12,m13,m21,m22,m23,m31,m32,m33)
o11=(m22*m33-m23)/det
o12=(m13*m32-m12)/det
o13=(m12*m23-m13)/det
o21=(m23*m31-m21)/det
o22=(m11*m33-m13)/det
o23=(m13*m21-m11)/det
o31=(m21*m32-m22)/det
o32=(m12*m31-m11)/det
o33=(m11*m22-m12)/det
end
matrix3_inv(o11,o12,o13,o21,o22,o23,o31,o32,o33,m11,m12,m13,m21,m22,m23,m31,m32,m33)