¿Cómo se puede dividir un polígono arbitrario en el menor número posible de triángulos rectángulos y rectángulos?

Probablemente haría una triangulación de Delaunay, que dividiría el polígono en triángulos. La triangulación de Delaunay evita triángulos delgados, por lo que probablemente ayudará a reducir la cantidad de triángulos. Como cualquier triángulo se puede convertir en dos triángulos rectángulos, tomaría los triángulos generados por la triangulación de Delaunay y los dividiría por la mitad (no haga esto para triángulos que ya son triángulos rectángulos). Eso me dejaría con el polígono original triangulado por triángulos rectángulos.

A continuación, me gustaría convertir pares de triángulos que forman rectángulos en rectángulos. Para hacer esto, iteraría sobre cada par de vértices en cada triángulo. Este bucle construiría una tabla hash que mapea pares de vértices conectados a triángulos que tienen esos vértices (puede haber un máximo de dos triángulos que comparten un par dado de vértices conectados). Luego, recorrería los valores de la tabla hash para obtener pares de triángulos que se tocaran. Para cada par de triángulos que se toca, verificaría si los ángulos en cada vértice compartido son complementarios. Si ambos vértices compartidos producen ángulos complementarios, combinaría los dos triángulos en un rectángulo.

Luego combinaría rectángulos de manera análoga para formar rectángulos más grandes.

Esto me dejaría con un polígono dividido en triángulos rectángulos y rectángulos.

Dudo que esta sea una solución óptima, pero puede estar cerca.