Geometry

  1. Simple geometry entities together with simple calculations
  2. Assumed are coordinates, where x points from left to right and Y points from bottom top
  3. Implements only functionality needed in other libraries

Entities

Point

  type Point =
    class
      new : x:float * y:float -> Point
      member Copy : dx:float -> dy:float -> Point
      member Equal : p:Point -> bool
      member Rotate : center:Point -> angle:float -> Point
      member X : float
      member Y : float
      static member Angle : p1:Point -> p2:Point -> float
      static member Distance : p1:Point -> p2:Point -> float
    end

Intersection

  type IntersecType =
    | Overlap
    | Parallel
    | P of Point option

Intersection - straight line

If not parallel or overlapping, must exist

  type PointIntersecExtend =
    class
      new : a:Point * b:Point * c:Point * d:Point -> PointIntersecExtend
      member Intersection : unit -> IntersecType
    end

Intersection - line

Intersection must lay on both lines a-b and c-d

  type PointIntesecLimit =
    class
      new : a:Point * b:Point * c:Point * d:Point -> PointIntesecLimit
      member Intersection : unit -> IntersecType
    end

Line

  type Line =
    class
      new : p1:Geometry.Point * p2:Geometry.Point -> Line
      member Copy : dx:float -> dy:float -> Line
      member IntersectWith : l:Line -> Geometry.IntersecType
      member IntersectWithExtended : l:Line -> Geometry.IntersecType
      member Rotate : center:Geometry.Point -> angle:float -> Line
      member Angle : float
      member Length : float
      member P1 : Geometry.Point
      member P2 : Geometry.Point
    end

Polyline

Cannot intersect itself. Is meant for interpolations.

Minimal number of vertexes is 3

For intersection use methods in Line class

  type Polyline =
    class
      new : points:Geometry.Point list -> Polyline
      member Copy : dx:float -> dy:float -> Polyline
      member Rotate : center:Geometry.Point -> angle:float -> Polyline
      member Y : xi:float -> float
      member Area : float
      member Length : float
      member Points : Geometry.Point list
    end

Circle

No intersection supported. For intersection use methods in Line class

  type Circle =
    class
      new : center:Geometry.Point * radius:float -> Circle
      member Copy : dx:float -> dy:float -> Circle
      member Rotate : center:Geometry.Point -> angle:float -> Circle
      member Area : float
      member Center : Geometry.Point
      member Radius : float
    end

Polygon

Cannot crossing itself!

  type Polygon =
    class
      new : points:Geometry.Point list -> Polygon
      member Copy : dx:float -> dy:float -> Polygon
      member Rotate : center:Geometry.Point -> angle:float -> Polygon
      member Points : Geometry.Point list
      static member CrossingItself : points:Geometry.Point list -> bool
    end