Tinfour Project Roadmap - gwlucastrig/Tinfour GitHub Wiki

Project Roadmap

Currently, Tinfour is a one-man project. The long-term plan is to accept contributions from other developers. Migration to a multi-contributor approach will be dependent on code maturity and public interest (i.e. whether anyone actually wants to work on it).

Future Work

Future work will, of course, depend on whether the Tinfour project develops a user community. The items below describes some ideas we are considering for future development. Your feedback is welcome. And, naturally, if you are interested in undertaking any software development related to the Tinfour project, your participation is welcome.

Adding and removing vertices to and from a constrained triangulation

The incremental TIN classes always supported the ability to add or remove vertices from an ordinary Delaunay triangulation. But they did not permit vertices to be added or removed from the mesh after constraints were installed. The current implementation now allows vertices to be added to the triangular mesh even after constraints are added. We have not yet implemented the ability to remove vertices and may defer this feature for now.

The ability to add vertices to a constrained triangulation is needed to support Delaunay refinement (see below).

Removing vertices would be useful for cross-validation tests. Cross validation is a technique for evaluating how well an interpolation routine matches the "true" values for a surface. For each vertex in the collection, the vertex is removed from the triangulation, an interpolated value is computed, the difference in value is noted, and the vertex is restored. During development, the Tinfour project used cross-validation tests extensively to verify our interpolation implementations. But, without the ability to remove vertices from a constrained Delaunay, cross-validation tests require special logic that is only available in one of our interpolator classes (the Natural Neighbor Interpolator).

Delaunay refinement

Delaunay triangulations attempt to produce a robust set of triangles, but can sometimes give rise to "skinny" triangles, especially near mesh boundaries and constrained edges. Delaunay refinement techniques attempt to improve the quality of the mesh by inserting artificial vertices (Steiner points) into the TIN. A good discussion of the issues is given by Jonathan Shewchuk's notes on Delaunay refinement.

There's no reason why Delaunay Refinement could not be implemented by an independent developer. In support of that, some of the internal elements in the incremental TIN classes will have to exposed via a public API. The Tinfour development team is prepared to work with any interested party in doing so.

Unifying the standard and semi-virtual incremental TIN classes

In the current implementation, the standard and semi-virtual incremental TIN classes feature a substantial amount of redundant code. This unfortunate state of affairs arose during implementation because of performance issues and the incompatibility of the QuadEdge and SemiVirtualEdge classes used by the respective packages. When I attempted to write code that would use a generic interface for edges, it suffered from substantial performance issues due to the cost of "downcasting" Java references when linking edges together in the TIN. I am currently investigating ways to avoid this overhead and consolidate as much as possible for the two packages.

Other ideas

If you are interested in seeing new capabilities added to Tinfour, I have a couple of ideas and would like to hear about yours. Some of my favorite features in the Tinfour libraries were the result of suggestions made by users.

I'd like to be able to set up a gallery web page that showed images from application that used the Tinfour libraries for practical purposes.

I'd like to see Tinfour do more with Voronoi Diagrams, a graphical structure which is closely related to the Delaunay Triangulation.

I'd also like to have the Tinfour Viewer application extend the support for metadata obtained from LAS files, particularly those elements using Well-Known Text (WKT) format and GeoTIFF tags.