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

```
```

```
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
```

```
```

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

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 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

```
```

```
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
```

```
```

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
```

```
```

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
```

```
```

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
```

```
```