Module Beloch.Isometry3

Exact 3D rigid motion: a 3×3 orthogonal matrix (det ±1) plus a translation, all in Num. Places a face of the paper into 3-space. Flat folds use only half_turn_about_line; general rotation-by-θ (θ = rπ) is Stage B.

type point = {
  1. x : Num.t;
  2. y : Num.t;
  3. z : Num.t;
}
type t = {
  1. m00 : Num.t;
  2. m01 : Num.t;
  3. m02 : Num.t;
  4. m10 : Num.t;
  5. m11 : Num.t;
  6. m12 : Num.t;
  7. m20 : Num.t;
  8. m21 : Num.t;
  9. m22 : Num.t;
  10. tx : Num.t;
  11. ty : Num.t;
  12. tz : Num.t;
}
val identity : t
val apply_point : t -> point -> point
val compose : t -> t -> t
val det_sign : t -> int
val inverse : t -> t
val half_turn_about_line : on:point -> dir:point -> t
val equal : t -> t -> bool