aboutsummaryrefslogtreecommitdiff
path: root/motus/lib
AgeCommit message (Expand)Author
2022-02-07Added a motus solverSébastien Dailly
f='#n8'>8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
type t =
  { p0:Gg.v2      (* The starting point *)
  ; p1:Gg.v2      (* The end point *)
  ; ctrl0:Gg.v2   (* The control point *)
  ; ctrl1:Gg.v2 } (* The control point *)

type quadratic

(**
   Build a control point for a quadratic curve for passing throuht 3 points.
   taken from https://xuhehuan.com/2608.html


   also look to https://pomax.github.io/bezierinfo/#pointcurves
*)
val three_points_quadratic
  : Gg.v2 -> Gg.v2 -> Gg.v2 -> quadratic

(**
   Create a curve from three points.

   This is an implementation for
   https://pomax.github.io/bezierinfo/#pointcurves

*)
val three_points_cubic
  : float -> Gg.v2 -> Gg.v2 -> Gg.v2 -> t

val quadratic_to_cubic
  : quadratic -> t

(** Split a bezier curve in two at a given position *)
val slice
  : float -> t -> t * t

(** Return the closest point to the curve by approximation *)
val get_closest_point
  : Gg.v2 -> t -> float * Gg.v2

val reverse: t -> t