Dual mesh and dual geometry.
Added functionalities for computing dual meshes and geometries. The functions also handle boundaries and leave to the user the option to preserve either the bijection between primal vertices and dual faces or between primal faces and dual vertices. Preserved bijections also preserve the indexing (i.e., primal vertex with index i is mapped to dual face with index i, and primal face with index j is mapped to dual vertex with index j). I think the code can be optimized, but I have extensively tested it in a personal project and it produces correct results.
What applications would such a feature have? I'm genuinely curious!
Personally, I've used the feature for visualizing Voronoi regions onto the surface. With standard vertex coloring I got smooth transitions between regions, and with triangle coloring the result is technically incorrect. Using face coloring on the dual mesh (keeping the one-to-one correspondence between primal vertices and dual faces), I was able to visualize the partitioning correctly.
As a side note, I've also used it for some other generic visualizations of primal/dual correspondences, for batch generation of polygonal meshes, and for testing the consistency of some methods on polygonal and triangular meshes.