matrix3.lua 691 B

12345678910111213141516171819202122232425
  1. local function det_mat3(a)
  2. return a[1] * (a[5]*a[9] - a[6]*a[8])
  3. + a[2] * (a[6]*a[7] - a[4]*a[9])
  4. + a[3] * (a[4]*a[8] - a[5]*a[7])
  5. end
  6. local function invert_mat3(b, a)
  7. local t11, t12, t13
  8. = a[5]*a[9] - a[6]*a[8]
  9. , a[6]*a[7] - a[4]*a[9]
  10. , a[4]*a[8] - a[5]*a[7]
  11. local det = a[1] * t11 + a[2] * t12 + a[3] * t13
  12. if det ~= 0 then
  13. b[1], b[2], b[3],
  14. b[4], b[5], b[6],
  15. b[7], b[8], b[9]
  16. = t11 / det, (a[3]*a[8] - a[2]*a[9]) / det, (a[2]*a[6] - a[3]*a[5]) / det
  17. , t12 / det, (a[1]*a[9] - a[3]*a[7]) / det, (a[3]*a[4] - a[1]*a[6]) / det
  18. , t13 / det, (a[2]*a[7] - a[1]*a[8]) / det, (a[1]*a[5] - a[2]*a[4]) / det
  19. end
  20. return det
  21. end