I think that you make life difficult for yourself by trying to determine the complete mathematics of geometries, which contains points at infinite distance. This is not necessary for the purposes of your original problem of calculating the Delaunay triangulation accurately.
I wrote the Delaunay generator in Java some time ago and it is available here: http://open.trickl.com/trickl-graph/index.html
See http://open.trickl.com/trickl-graph/apidocs/index.html and in particular:
// Check if fourth point is within the circumcircle defined by the first three private boolean isWithinCircumcircle(PlanarGraph<V, E> graph, V first, V second, V third, V fourth) { // Treat the boundary as if infinitely far away Coordinate p = vertexToCoordinate.get(fourth); if (PlanarGraphs.isVertexBoundary(graph, first)) { return isLeftOf(third, second, p); } else if (PlanarGraphs.isVertexBoundary(graph, second)) { return isLeftOf(first, third, p); } else if (PlanarGraphs.isVertexBoundary(graph, third)) { return isLeftOf(second, first, p); } else if (PlanarGraphs.isVertexBoundary(graph, fourth)) { return false; } Coordinate a = vertexToCoordinate.get(first); Coordinate b = vertexToCoordinate.get(second); Coordinate c = vertexToCoordinate.get(third); boolean within = (ax * ax + ay * ay) * getDblOrientedTriangleArea(b, c, p) - (bx * bx + by * by) * getDblOrientedTriangleArea(a, c, p) + (cx * cx + cy * cy) * getDblOrientedTriangleArea(a, b, p) - (px * px + py * py) * getDblOrientedTriangleArea(a, b, c) > 0; return within; }
Here, the boundary points are explicitly checked when checking the circle conditions, so they can be effectively considered as "infinite". This is much simpler than figuring out all the geometric consequences than you describe.
source share