Module Beloch.Geom

Exact constructible-real plane geometry. A line a*x + b*y = c with a,b,c in Num (the v0.3 constructible reals; rational on the fast-path).

type point = {
  1. x : Num.t;
  2. y : Num.t;
}
type line = {
  1. a : Num.t;
  2. b : Num.t;
  3. c : Num.t;
}
val point_equal : point -> point -> bool
val line_through : point -> point -> line
val perpendicular_bisector : point -> point -> line
val perpendicular_through : line -> point -> line
val parallel : line -> line -> bool
val same_line : line -> line -> bool
val intersection : line -> line -> point option
val project_crease : point -> line -> line -> line option
val circle_line_intersection : point -> Num.t -> line -> point list
val beloch_creases : point -> line -> point -> line list
val beloch7_creases : point -> line -> point -> line -> line list
val in_unit_square : point -> bool
type segment = point * point
val seg_param : segment -> point -> Num.t
val extreme_pair : point list -> (point * point) option
val material_bundle : (point * point) list -> (point * point) option
val clip_to_unit_square : line -> segment option
val segment_intersection : segment -> segment -> point option
val direction_half : Num.t -> Num.t -> int
val ccw_compare : center:point -> point -> point -> int
val signed_area : point array -> Num.t
val angle_bisectors : line -> line -> (line * line) option
val parallel_midline : line -> line -> line
val side_of_line : line -> point -> int
val reflect_point : line -> point -> point
val clip_convex_halfplane : line -> int -> point array -> point array
val in_convex_polygon : point array -> point -> bool
val on_segment : segment -> point -> bool
val convex_overlap : point array -> point array -> bool
val segment_crosses_interior : (point * point) -> point array -> bool
val segments_overlap_collinear : (point * point) -> (point * point) -> bool
val clip_line_to_convex : line -> point array -> (point * point) option
val midpoint_strictly_inside : point array -> point -> point -> bool
val line_cuts_polygon : line -> point array -> bool
val segment_cuts_polygon : segment -> point array -> bool