Delaunay Triangulation Equivalent for Undirected Graph - graph

I'm working on a path planning algorithm that is equivalent to a traveling salesman problem. I don't know how many nodes I might have so I'm willing to sacrifice accuracy for speed. My problem can be modeled as a fully connected graph, with the cost of transitioning between nodes being related to more than just the distance between nodes. I'd like to restrict my search space to connections that lie on the delaunay triangulation (the research I've read notes that 95-100% of connections in solutions to the TSP lie on the delaunay triangulation) but since my graph cannot be expressed as 2D or even 3D geometry, I can't directly use it in my representation. Is there an algorithm that results in an equivalent triangulation to the delaunay triangulation that applies to graphs that do not conform to a geometric representation (cost of connections cannot be expressed as a geometric distance between points due to over-constraint)?

For n-dimension you can try a gray code.

Related

How to use delaunay trianglation in 3d points?

I understand how to use delaunay triangulation in 2d points?
But how to use delaunay triangulation in 3d points?
I mean I want to generate surface triangle mesh not tetrahedron mesh, so how can I use delaunay triangulation to generate 3d surface mesh?
Please give me some hint.
To triangulate a 3D point cloud you need the BallPivoting algorithm: https://vgc.poly.edu/~csilva/papers/tvcg99.pdf
There are two meanings of a 3D triangulation. One is when the whole space is filled, likely with tetrahedra (hexahedra and others may be also used). The other is called 2.5D, typically for terrains where the z is a property as the color or whatever, which doesn't influence the resulting triangulation.
If you use Shewchuk's triangle you can get the result.
If you are curious enough, you'll be able to select those tetrahedra that have one face not shared with other tetrahedra. These are the same tetrahedra "joined" with infinite/enclosing points. Extract those faces and you have your 3D surface triangulation.
If you want "direct" surface reconstruction then you undoubtly need to know in advance which vertices among the total given are in the surface. If you don't know them, perhaps the "maxima method" allows to find them out.
One your points cloud consists only of surface vertices, the triangulation method can be any one you like, from (adapted) incremental Chew's, Ruppert, etc to "ball-pivoting" method and "marching cubes" method.
The Delaunay tetrahedrization doesn't fit for two reasons
it fills a volume with tetrahedra, instead of defining a surface,
it fills the convex hull of the points, which is probably not what you expect.
To address the second problem, you need to accept concavities, and this implies that you need to specify a reference scale that tells what level of detail you want. This leads to the concept of Alpha Shapes, which are obtained as a subset of the faces.
Lookup "Alpha Shape" in an image search engine.

How best to triangulate a 5-point star polygon?

I've implemented the "ear-splitting" triangulation method for simple polygons. In testing it out, I see it crashes on the test case of a symmetrical 5-point star.
I think I understand why this polygon is "tricky" -- because it contains edges that are collinear....an ear-shaving diagonal which the algorithm chooses based on starting with a convex vertex (one of the 5 points), then inspecting the diagonal for no "X" edge intersections, and for no vertices intruding into the ear triangle) will blindly assign a diagonal which is collinear with 2 existing edges. After removing the ear's external vertex, the remaining polygon will no longer be "simple" -- it will have vertices having a straight angle (180 deg.), a violation of the simple polygon contract.
I'm chagrined that I've proven that ear-splitting faces this failure case. I thought from the literature that it was a general-purpose method (applicable to all simple polygons). Are those "inductive proofs" you find repeated everywhere overstated?
Has anyone successfully modified an ear-splitting triangulation method to handle the 5-point star?
Random Perturbation of Collinear Edge Endpoints
The "ear-splitting" triangulation algo suffers from a breakdown in the case of polygons which have edges that are collinear. As you can see in the 5-point star, all the edges have this problem.
A simple "patch" can rescue the "ear-splitting" triangulation algo:
1) Before beginning the triangulation, inspect the polygon's edge list (as LineSegs) for any pair of edges that share the same 2D extended line. Apply a tiny random perturbation to both endpoints of any such edge, (e.g., in the range -0.001..+0.001.) Save the original locations of these vertices, so they can be restored after the triangulation.
2) Now you can run ear-split triangulation, having removed the ill-conditioned situation of collinear edges.
3) Undo the perturbations you applied to the vertices.
I've tested this approach, and it works fine. It might seem a bit of a hack, but it's by far the easiest way to rescue the ear-split triangulation from its most noticeable flaw. The random perturbations want to be tiny compared to location coordinates in your app, but huge compared to the finite math EPSILON you're using to compare real-numbers for equal.

Triangulate polygon matching Delaunay property

I want to triangulate a polygon (without selfintersection, but with holes and the polygon can also be concav).
In this question (e.g.):
Delaunay triangulating the 2d polygon with holes
a Constrained Delaunay Triangulation is proposed.
What I was wondering about: is this the best way to do so or is it like "using a sledge-hammer to crack a nut"? An alternativ would be to use an algorithm for creating a "normal" triangulation (eg splitting the polygon in y-monoton parts and triangulate these parts) and flipping the edges afterwards. But it seams that (nearly) nobody takes this solution. Is there a reason?
What are the pros and cons for one of these solutions?
(the polygons can have an arbitrary size)
There are a few reasons to prefer (constrained) Delaunay triangulations to other approaches:
In R^2 it can be proven that such a triangulation is the "best" way to triangulate a given geometry -- resulting in a triangulation that maximises the minimum angle. This is equivalent to producing triangles of optimal quality, without any "skinny" elements.
Forming the Delaunay triangulation is efficient (i.e. O(n*log(n)) in R^2).
Delaunay triangulation algorithms are robust and efficient in practice. A number of very high quality implementations exist, such as Triangle and CGAL.
Delaunay triangulations generalise to higher-dimensional problems (i.e. tetrahedrons in R^3 and general simplexes in R^d).
Delaunay triangulations induce an orthogonal dual complex (i.e. the Voronoi diagram). This can be important for certain classes of numerical methods.
Depending on what exactly you're looking to achieve, you might find one or more of these criteria persuasive. Other options, such as ear-clipping or monotone slab triangulation, can be competitive in some areas, but don't, IMO, exhibit the same kind of overall performance.
You can try alpha shapes. It is defined as a delaunay triangulation without edges exceeding alpha.

Constructing a graph from points with edges determined by a Euclidean distance cutoff

I have a collection of points in R^3 with a Euclidean distance metric. I would like to construct a graph with each point represented by a node, and edges only between points with distance d < r, where r is some cutoff value.
Searching stackoverflow yielded an interesting solution: to compute the Delaunay triangulation of the data points, and then to remove edges longer than the threshold distance.
(source: 3D Connected Points Labeling based on Euclidean distances)
Are there other ways to do this that are more efficient?
Also, what is an efficient way of removing edges longer than the cutoff distance?
If not, does anyone know of a Delaunay triangulation implementation in Python?
edit: nevermind the last question, matplotlib can do the triangulation, scipy for 3d.
Thanks.
PS - somewhat related: since the Delaunay triangulation is the dual graph of the Voronoi diagram, and k-means clustering splits space into Voronoi cells, is the method described here the same (or closely related to) k-means clustering? I'm a beginner in machine learning algorithms so I would love some expert feedback on this.
Your result may be the complete graph, so a Delaunay triangulation won't help. But you can use a kD-Tree.
http://en.wikipedia.org/wiki/K-d_tree

Delaunay triangulation of monotone Polygon

I have searched the whole internet and scientific databases for a paper on Delaunay Triangulation of monotone Polygons. I'm not searching for arbitrary Triangulation of Polygons, only for Delaunay triangulation. Does anybody know such a publication, where monotone Polygons are Delaunay triangulated? Thx!
Delaunay triangulation applies to a set of points, not to a given shape (such as a polygon).
You're looking for constrained delaunay triangulation if you have a specific shape to triangulate...
I implemented the Bowyer-Watson algorithm, with constraints to delaunay-triangulate a given polygon (not necessarily monotone).
My implementation is a part of OgreProcedural.
I read the following papers on the subject before implementing it :
http://www.geom.uiuc.edu/~samuelp/del_project.html
http://www.cg.tuwien.ac.at/hostings/cescg/CESCG-2004/web/Domiter-Vid/

Resources