1 type Matrix3<T> = struct 2 m11 : T 3 m12 : T 4 m13 : T 5 m21 : T 6 m22 : T 7 m23 : T 8 m31 : T 9 m32 : T 10 m33 : T 11 12 def transpose = Matrix3 m11 m21 m31 13 m12 m22 m32 14 m13 m23 m33 15 16 type Matrix3<T> where T : Number 17 def (*) (rhs : Vector3<T>) = 18 let x = Vector3 m11 m12 m13 |> dot rhs 19 let y = Vector3 m21 m22 m23 |> dot rhs 20 let z = Vector3 m31 m32 m33 |> dot rhs 21 22 Vector3 x y z 23 24 def determinant = 25 m11 * m22 * m33 26 + m12 * m23 * m31 27 + m13 * m21 * m32 28 - m13 * m22 * m31 29 - m11 * m23 * m32 30 - m12 * m21 * m33 31 32 type Matrix3<T> where T : Real 33 def inverse = 34 let d = [m22 * m33 - m23 * m32 35 m23 * m31 - m21 * m33 36 m21 * m32 - m22 * m31] 37 38 let det = m11 * d[0] + m12 * d[1] + m13 * d[2] 39 assert det <> 0 40 let s = 1 / det 41 42 let r11 = d[0] * s 43 let r12 = (m13 * m32 - m12 * m33) * s 44 let r13 = (m12 * m23 - m13 * m22) * s 45 let r21 = d[1] * s 46 let r22 = (m11 * m33 - m13 * m31) * s 47 let r23 = (m13 * m21 - m11 * m23) * s 48 let r31 = d[2] * s 49 let r32 = (m12 * m31 - m11 * m32) * s 50 let r33 = (m11 * m22 - m12 * m21) * s 51 52 Matrix3 r11 r12 r13 53 r21 r22 r23 54 r31 r32 r33 55