Module Joint3d

type kind =
  1. | Ball of {
    1. cone : (Vec3.t * Vec3.t * float) option;
    }
  2. | Hinge of {
    1. axis_a : Vec3.t;
    2. axis_b : Vec3.t;
    3. ref_a : Vec3.t;
    4. ref_b : Vec3.t;
    5. limits : (float * float) option;
    6. motor : (float * float) option;
    }
  3. | Distance of {
    1. length : float;
    }
type t = {
  1. a : int;
  2. b : int;
  3. anchor_a : Vec3.t;
  4. anchor_b : Vec3.t;
  5. kind : kind;
}
val ball : Body3d.t array -> int -> int -> at:Vec3.t -> ?cone:(Vec3.t * float) -> unit -> t
val hinge : Body3d.t array -> int -> int -> at:Vec3.t -> axis:Vec3.t -> ?limits:(float * float) -> ?motor:(float * float) -> unit -> t
val distance : Body3d.t array -> int -> int -> at_a:Vec3.t -> at_b:Vec3.t -> unit -> t
type row
val rows : beta:float -> dt:float -> Body3d.t array -> t -> row list
val solve_row : Body3d.t array -> row -> unit
val anchors : Body3d.t array -> t -> Vec3.t * Vec3.t
val angle : Body3d.t array -> t -> float