# 16. Geometry: primitive geometric operations

GNATColl provides the package GNATCOLL.Geometry. This package includes a number of primitive operations on geometric figures like points, segments, lines, circles, rectangles and polygons. In particular, you can compute their intersections, the distances,...

This package is generic, so that you can specify the type of coordinates you wish to handle:

    declare
       package Float_Geometry is new GNATCOLL.Geometry (Float);
       use Float_Geometry;

       P1 : constant Point := (1.0, 1.0);
       P2 : constant Point := (2.0, 3.0);
    begin
       Put_Line ("Distance P1-P2 is" & Distance (P1, P2)'Img);
       --  Will print 2.23607
    end;

Or some operations involving a polygon:

    declare
       P3 : constant Point := (3.7, 2.0);
       P  : constant Polygon :=
          ((2.0, 1.3), (4.1, 3.0), (5.3, 2.6), (2.9, 0.7), (2.0, 1.3));
    begin
       Put_Line ("Area of polygon:" & Area (P));   --   3.015
       Put_Line ("P3 inside polygon ? " & Inside (P3, P)'Img);  --  True
    end;