Search code examples
computational-geometrycgalpolygons

Minimum Quadrilaterlization of Polygons - existing algorithms?


I'm currently trying to find a way to take irregularly shaped polygons and divide them into as few quadrilaterals as possible.

I can't find an obvious out of the box algorithm anywhere that does this, so I'm thinking of going down two possible routes.

1.Getting the optimal triangulation first, and then converting these to quadrilaterals

2.Trying to alter the CGAL optimal_convex_partitions function from their 2d polygon partitioning package to create quadrilateral partitions https://doc.cgal.org/latest/Partition_2/group__PkgPolygonPartitioning2.html#ga3ca9fb1f363f9f792bfbbeca65ad5cc5

I'm a total beginner to computational geometry, so I'd just like to know if either of these approaches seems like a fools errand before I try to learn C++? If anyone knows anything about the best possible approach to this that'd be even better. Thanks!

(Edit) Including a sample polygon - None of them should have holes, though they may have complex exteriors and concavity.

polygon example


Solution

    1. I assume that if you start with triangles and then try to merge two adjacent triangles into one quadrilateral in a greedy fashion you may end up with many isolated triangles.

    2. Not sure how the convex partition may come handy.

    3. You may find useful information in the articles below. As far as know, finite element analysis requires that the input object comprise of triangles or quads, so there has been some research done in this direction. Here are two papers that might be relevant:

    Ted D. Blacker amd Michael B. Stephenson, “Paving: a new approach to automated quadrilateral mesh generation” Int. J. Num.Meth.Engg, Vol 32, 811-847 (1991)

    Jinwoo Choi and Yohngjo Kim , Development of a New Algorithm for Automatic Generation of a Quadrilateral Mesh, International Journal of CAD/CAM Vol. 10, No. 2, pp. 00~00 (2011

    I'm far from being an expert on this subjest, but I'm certain that these alg. can be implemented using CGAL...