## Objectives for version 1.0

The aim of the library is to provide a collection of shapes that can be manipulated and processed in many ways: clipping, affine transforms. The different families of shapes planned are:

- Points, and collection of points;
- Straight objects like straight lines, line segments, or rays;
- Polygons, simple and complex (multiply connected and with holes);
- Conic curves: ellipses, parabolas, hyperbolas, and their respective arcs;
- Polynomial curves, like Bezier curves or B-Splines;
- Planar domains, delimited by a set of continuous oriented curves

In addition to these features, composition of several shapes is planned, to manipulate collection of shapes, or complex boundaries composed of different types of curves.

The library will include classes which are not shapes, like

- Vectors
- geometric transforms: affine, projective, inversions, and projections
- A class 'Angle2D' is also provided with utility static methods
- A class Box2D, used for clipping shapes

## State of implementation

Many geometrical primitives are already provided. The Geometrical shapes are classified according to their inner dimension:

- Points, and Point sets
- Curves, which can be continuous or oriented. Implemented curves are:
- Straight lines, line segments, rays, polylines, closed polyline
- Conic curves: ellipses, parabolas, hyperbolas, and their respective arcs;
- Polynomial: only the CubicSpline and QuadSline are implemented.

- Planar domains, whose boundary is an arbitrary oriented curve or set of oriented curves can be created
- Polygons implementation will be rewritten

- Vectors
- Transforms of the plane
- Affine transforms (rotations, translations, scaling, homothecies...)
- Projective transforms are planned
- Projections (on line, circle) are also planned

- A class 'Box2D' for clipping shapes
- A class 'Angle2D' is also provided with utility static methods

You may also consult the Javadoc generated html, which provides an overview of the possibilities.

The software is still largely in development, and many functions are not yet implemented.

## Examples of use

The demo page shows some examples of application of the library for geometrical problems.

Moreover, the library was used to developed other open-source projects:

- Knotwork is an application to draw celtic or arabic knotworks. This software is actually at the origin of JavaGeom, as I felt a need for a convenient geometrical library when I was working on Knotwork.
- Euclide is an interactive dynamic geometry software. I use it actively to test features added in JavaGeom.