12345678910111213141516171819202122232425 |
- local function det_mat3(a)
- return a[1] * (a[5]*a[9] - a[6]*a[8])
- + a[2] * (a[6]*a[7] - a[4]*a[9])
- + a[3] * (a[4]*a[8] - a[5]*a[7])
- end
- local function invert_mat3(b, a)
- local t11, t12, t13
- = a[5]*a[9] - a[6]*a[8]
- , a[6]*a[7] - a[4]*a[9]
- , a[4]*a[8] - a[5]*a[7]
- local det = a[1] * t11 + a[2] * t12 + a[3] * t13
- if det ~= 0 then
- b[1], b[2], b[3],
- b[4], b[5], b[6],
- b[7], b[8], b[9]
- = t11 / det, (a[3]*a[8] - a[2]*a[9]) / det, (a[2]*a[6] - a[3]*a[5]) / det
- , t12 / det, (a[1]*a[9] - a[3]*a[7]) / det, (a[3]*a[4] - a[1]*a[6]) / det
- , t13 / det, (a[2]*a[7] - a[1]*a[8]) / det, (a[1]*a[5] - a[2]*a[4]) / det
- end
- return det
- end
|