Support for Steiner points to refine Constrained Delaunay Triangulation? #88
Replies: 6 comments 14 replies
-
The answer to that question is "yes and no". In the near term, it is possible to put together a partial solution doing exactly what you described. It will be a little slow if your triangulation contains more than a few hundred thousand sample points. And it won't be as close to optimal as one might prefer. But it should help. I will post the broad outlines a a procedure below. In the longer term, Delaunay refinement would be an important enhancement to the Tinfour library that I would very much like to see happen. I've researched both Ruppert's algorithm and Chew's second algorithm, and think I have an idea of how to proceed. I have wanted to do it for a few years now, but the level of effort is large... and, until you posted here, nobody has ever asked for it. It would take me a coupe of months to do the implementation (since Tinfour is not part of my "day job" and I can only work on it nights and weekends, work tends to go rather slow). So the question of whether I took on the project would depend on how much use you think you would have for Delaunay refinement and whether your own time requirements would be compatible with my limited work schedule. Before I get started on my proposed approach, I have to ask if you are concerned about the assignment of z values to your Steiner points or if you only care about the horizontal geometry of the triangulation? Also, if you could put some test data someplace where I could download it, I could see if I can implement some example code to test the ideas described below. Okay, here's a broad outline of the quick and dirty solution:
Ruppert's algorithm has a special rule for handling cases when the circumcenters fall outside the convex hull of the triangulation. I will look up the details tomorrow and post some more information. As you can see, the method described above is slow because it involves rebuilding the Delaunay multiple times and also making a pass through the triangulation to identify skinny triangles each time a new Delaunay is built. Tinfour's pretty fast, repeating that process multiple time does take some processing time. |
Beta Was this translation helpful? Give feedback.
-
The geometry in you pictures looks like an excellent opportunity for
refinement.
I'm afraid I am not making much progress on my side. Do you have an easy
way to send me that data to look at?
…On Sun, Sep 11, 2022, 4:15 PM Adrian Maggio ***@***.***> wrote:
Note: this is the without refinement. Notice the skinny triangles.
—
Reply to this email directly, view it on GitHub
<#88 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AEWJDYN7IQIML6AV5MIAEMLV5Y4VBANCNFSM6AAAAAAQIJFEKA>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Ok, found a bug in my code related to a scaling factor I use to condition point values. The scaling was being applied every time the refinement was run, so it was accumulating where it should not, causing vertex data to increase rapidly. So, in other words, the refinement procedure you outlined is working for me. I still have the issue of the number of skinny triangles sometime increasing after refinement, and the issue of not being able to set my skinny triangle angle threshold above 3 degrees. Any idea on how to fix those? |
Beta Was this translation helpful? Give feedback.
-
Here is some test results: |
Beta Was this translation helpful? Give feedback.
-
First off, i think you've made petty good progress. I don't have any ideas
right now. But I am going to reread Ruppert's paper tonight and see if I
can come up with anything more.
…On Tue, Sep 13, 2022, 4:00 PM Adrian Maggio ***@***.***> wrote:
Here is some test results:
[image: Screen Shot 2022-09-13 at 3 58 27 PM]
<https://user-images.githubusercontent.com/22044272/189997701-45f330b7-738b-4ed4-909c-e7701328c44d.png>
[image: Screen Shot 2022-09-13 at 3 58 46 PM]
<https://user-images.githubusercontent.com/22044272/189997730-d33e1bef-4ad6-45c7-b5da-58161715bb23.png>
[image: Screen Shot 2022-09-13 at 3 59 20 PM]
<https://user-images.githubusercontent.com/22044272/189997745-d01a42a3-5284-41f9-b7bb-779599d46e70.png>
[image: Screen Shot 2022-09-13 at 3 59 33 PM]
<https://user-images.githubusercontent.com/22044272/189997754-49e27b4f-eb5a-4bfb-b6a3-b35f923c2a9a.png>
—
Reply to this email directly, view it on GitHub
<#88 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AEWJDYKMTANLZ4DLBFY66ZTV6DMPHANCNFSM6AAAAAAQIJFEKA>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Looking at your results, they're really impressive. I especially like to animation you presented. I am pleased that Tinfour could be part of that. I dug up my old notes on algorithms for Delaunay refinement and had started working on some test code. It's going to be a long and challenging process. So I won't be able to provide much of use to you in the near term. One thing I wanted to mention. Two well known investigators into the Delaunay, Ruppert and Shewchuk, both caution about cases where the constraint geometries include sharp angles. Because they are constraints, they can't be adjusted, and no matter how many points an algorithm inserts, they will still maintain the original angles. Ruppert and Shewchuk both offer solutions involving "guard edges", but neither of them really appeal to me. I didn't see any features like that in your source data, but it is something that could present a problem in the future. |
Beta Was this translation helpful? Give feedback.
-
Is there support in Tinfour for Constrained Delaunay Triangulation refinement via Steiner points? I am using Tinfour to triangulate perlin-noise generated 2D terrain paths. The constraints are causing many skinny triangles. Briefly read that Steiner points can be generated using the circumcircle centers of "bad triangles". Not sure if that is a valid approach, or how to achieve that.
Beta Was this translation helpful? Give feedback.
All reactions