Available Software

Maple

The following shows some examples of how to use maple to perform geometry operations and analysis:

including the package
> with(geometry):

defining a circle
> circle(c, x^2 + y^2 = 1):

defining a line and points and then testing if the points are on that line
> line(l, x + y = 1), point(A, a, 1/2), point(B, 3/5, b):
> IsOnLine(A, l), IsOnLine(B, l), IsOnLine({A,B}, l);
						false, true, false

defining a triangle and getting a bisector
> triangle(ABC, [point(A, 0, 0), point(B, 1, 1), point(C, 1, 0)]):
> bisector(bA, A, ABC), bisector(bB, B, ABC), bisector(bC, C, ABC):
> intersection(iAB, bA, bB), intersection(iAC, bA, bC), intersection(iBC, bB, bC):
> coordinates(iAB), coordinates(iAC), coordinates(iBC);
		[[0.7071067812, 0.2928932188], [0.7071067812, 0.2928932188], [0.7071067812, 0.2928932188]]

> s := sides(ABC):
> r := 2*area(ABC) / (s[1] + s[2] + s[3]):
> incircle(c1, ABC):
> circle(c2, [iAB, r]):
> simplify(coordinates(center(c1))), simplify(coordinates(center(c2)));

                             1/2                   1/2
                        1 + 2        1        1 + 2        1
                       [--------, --------], [--------, --------]
                             1/2       1/2         1/2       1/2
                        2 + 2     2 + 2       2 + 2     2 + 2

> simplify(radius(c1)), simplify(radius(c2));

                                      1         1
                                   --------, --------
                                        1/2       1/2
                                   2 + 2     2 + 2

There is much more available in the geometry package, but I have only shown a small sample to give one an idea. It took more time than preferable to actually figure out the syntax and how to work with the available functionality. Maple is generally fairly closed so I could not find any information on the actual implementation of these routines. All the same, the following list describes the available means of creating an object:

All entities appear to store many of the straight-forward attributes along with the equation (or coefficients for an equation). A very quick analysis of source can be found here


The following information comes from http://people.scs.fsu.edu/~burkardt/cpp_src/geometry/geometry.html. Note that there is no actual structures present in the code.
Point
Represented by double[2]
Lines
Represented using two points on the line
Circle
double for the radius and a point for the center
Triangle
Simply three points
Polygon
An integer N and double[] of size 2*N for the points
As one can see the representation is very simple, mostly due to the fact that it is coded in a C fashion.

Java Topology Services (JTS)

I looked through the source at http://www.jump-project.org/project.php?PID=JTS&SID=OVER. The software seems to be very GIS oriented, and hence it does not really apply to the more analytic approach that my project wants to take. I've bookmarked the site and put it in this document because it may be of some use in the future but for now I am going to put it to the side.

GMath

Sourceforge site found at http://sourceforge.net/projects/tmath/. It is not taking an analytic approach, and hence I can't take too much from this. The following does list the things that describe the entities:

Resulting Decisions

The following lists the decisions as to the internal representations used for different geometrical entities, and why I believe they are the best to use. And some other, more global, decisions: