sig
  module Linear :
    sig
      val pnt : float -> AGeom.Point2d.t * AGeom.Point2d.t -> AGeom.Point2d.t
      val drv :
        float -> AGeom.Point2d.t * AGeom.Point2d.t -> AGeom.Vector2d.t
      val rand :
        AGeom.Point2d.t ->
        AGeom.Point2d.t -> AGeom.Point2d.t * AGeom.Point2d.t
      val srand :
        Random.State.t ->
        AGeom.Point2d.t ->
        AGeom.Point2d.t -> AGeom.Point2d.t * AGeom.Point2d.t
    end
  module Quadratic :
    sig
      val pnt :
        float ->
        AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t ->
        AGeom.Point2d.t
      val drv :
        float ->
        AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t ->
        AGeom.Vector2d.t
      val rand :
        AGeom.Point2d.t ->
        AGeom.Point2d.t ->
        AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t
      val srand :
        Random.State.t ->
        AGeom.Point2d.t ->
        AGeom.Point2d.t ->
        AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t
    end
  module Cubic :
    sig
      val pnt :
        float ->
        AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t ->
        AGeom.Point2d.t
      val drv :
        float ->
        AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t ->
        AGeom.Vector2d.t
      val rand :
        AGeom.Point2d.t ->
        AGeom.Point2d.t ->
        AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t
      val srand :
        Random.State.t ->
        AGeom.Point2d.t ->
        AGeom.Point2d.t ->
        AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t * AGeom.Point2d.t
    end
end