無限の距離にある点を含む幾何学の完全な数学を定義しようとすることで、あなたは人生を困難にしていると思います. これは、ドロネー三角形分割を正確に計算するという元の問題の目的には必要ありません。
私は少し前に Java で Delaunay ジェネレーターを書きました
。
http://open.trickl.com/trickl-graph/apidocs/index.htmlを参照してください。特に:
// 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 = (a.x * a.x + a.y * a.y) * getDblOrientedTriangleArea(b, c, p)
- (b.x * b.x + b.y * b.y) * getDblOrientedTriangleArea(a, c, p)
+ (c.x * c.x + c.y * c.y) * getDblOrientedTriangleArea(a, b, p)
- (p.x * p.x + p.y * p.y) * getDblOrientedTriangleArea(a, b, c) > 0;
return within;
}
ここでは、外接円条件をチェックするときに境界点が明示的にチェックされるため、効果的に「無限に」離れているものとして扱うことができます。これは、説明するよりもすべての幾何学的意味を理解するよりもはるかに簡単です。