Un poco más de detalle en su entrada y salida deseada podría ser útil.
Por ejemplo, si solo intenta hacer que los polígonos se conviertan en triángulos, probablemente funcione un ventilador de triángulo. Si estás tratando de cortar un polígono en pequeños pedazos, podrías implementar algún tipo de cuadrados de marcha.
bien, hice una mala suposición - Supuse que los cuadrados que marchan serían más similares a los cubos de marcha. Resulta que es bastante diferente, y no es lo que quise decir ...: |
En cualquier caso, para responder directamente a su pregunta, no conozco ninguna biblioteca simple que haga lo que está buscando. Estoy de acuerdo con la usabilidad de CGAL.
El algoritmo en el que estaba pensando era básicamente dividir polígonos con líneas, donde las líneas son una cuadrícula, por lo que en su mayoría se obtienen cuadrículas. Si tuviera una intersección de línea de polígono, la implementación sería simple. Otra forma de plantear este problema es tratar el 2do polígono como una función y superponer una grilla de puntos. Entonces solo haces algo similar a los cubos de marcha ... si los 4 puntos están en el polígono, haz un quad, si 3 están en make a triangle, 2 están en make a rectangle, etc. Probablemente overkill. Si querías polígonos de aspecto irregular, podrías aleatorizar las ubicaciones de los puntos de la grilla.
Por otro lado, podría hacer una subdivisión de estilo catmull-clark, pero omita el alisado. El algoritmo es básicamente agregar un punto en el centroide y en el punto medio de cada borde. Luego, para cada esquina del polígono original, se crea un nuevo polígono más pequeño que conecta el punto medio del borde anterior a la esquina, la esquina, el próximo punto medio del borde y el centroide.Esto teja el espacio y tendrá ángulos similares a tu polígono de entrada.
Por lo tanto, un montón de opciones, y me gustaría soluciones de intercambio de ideas, pero todavía no tienen idea de lo que está planeando sobre el uso de este. ¿Esto es para crear mallas destructibles? ¿Estás haciendo algún tipo de procesamiento de malla que requiere elementos más pequeños? ¿Tratando de evitar los artefactos de sombreado de Gouraud? ¿Es esto algo que se ejecuta como un preproceso o en tiempo real? ¿Qué tan importante es la exactitud? Más información resultaría en mejores sugerencias.
¿Es esto 3D o 2D? – GManNickG
@Gman: 2D ----- – mpen