es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CGAL: identificar aristas “no fronterizas”

Estoy descubriendo CGAL, probé con la envoltura convexa 3D. Lo intenté con los vértices de un cubo, y observé que la envoltura convexa es una triangulación (estoy usando Surface_mesh, no Polyhedron_3). Por lo tanto, CGAL incluye las diagonales de las caras del cubo en la lista de aristas. Quiero identificar estas aristas (porque, por ejemplo, no quiero dibujar estas aristas).

Esperaba que la función is_border identificara las otras aristas, pero devuelve false para todas las aristas. Entonces, ¿qué es una frontera?

Encontré una solución. Itero sobre las aristas y para cada par de las correspondientes semiaristas adjuntas, tomo la cara adjunta:

Mesh::Halfedge_index h0 = mesh.halfedge(ed, 0);
Mesh::Face_index face0 = mesh.face(h0);
Mesh::Halfedge_index h1 = mesh.halfedge(ed, 1);
Mesh::Face_index face1 = mesh.face(h1);

Luego calculo las normales de estas dos caras, y afirmo que la arista es una diagonal si estas dos normales son iguales. ¿Es correcto? Parece funcionar.

Pero mis preguntas son:

  • ¿Qué es una frontera, en el sentido de is_border?
  • ¿No hay una forma más conveniente de identificar las aristas “no frontera” (es decir, las diagonales en el caso del cubo)?
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c++, cgal y convex-hull, puedo responder las siguientes preguntas:

    • En el contexto de is_border, un borde es una arista que solo tiene una cara incidente. Por ejemplo, si tienes una malla que no está cerrada, algunas aristas serán bordes.

    • Dependiendo de cómo esté construida la malla, puede haber otras formas de identificar las aristas “no borde”. Por ejemplo, si sabes que la malla es un poliedro regular, podrías utilizar ese conocimiento para determinar cuáles aristas son diagonales. Otra aproximación podría ser calcular el ángulo entre las normales de las dos caras incidentes a cada arista, y considerar una arista como diagonal si ese ángulo es mayor que un cierto umbral. Sin embargo, iterar sobre las aristas y verificar las normales de las caras incidentes, como se describe en la publicación original, es un método válido y confiable para identificar diagonales.

Comments are closed.