En gráficos de computadora , la estructura de datos de borde alado es una forma de representar mallas poligonales en la memoria de la computadora . Es un tipo de representación de límites y describe tanto la geometría como la topología de un modelo. Se utilizan tres tipos de registros: registros de vértices, registros de bordes y registros de caras. Dada una referencia a un registro de bordes, se pueden responder varios tipos de consultas de adyacencia (consultas sobre bordes, vértices y caras vecinos) en tiempo constante . Este tipo de información de adyacencia es útil para algoritmos como la superficie de subdivisión . [1]
La estructura de datos de aristas aladas describe explícitamente la geometría y la topología de las caras, aristas y vértices cuando tres o más superficies se juntan y se encuentran en una arista común. El orden es tal que las superficies se ordenan en sentido antihorario con respecto a la orientación innata de la arista de intersección. Además, la representación permite situaciones numéricamente inestables como la que se muestra a continuación. [ Aclaración necesaria ]
La estructura de datos de borde alado permite un recorrido rápido entre caras, bordes y vértices debido a la estructura explícitamente vinculada de la red. Sirve consultas de adyacencia en tiempo constante con poca sobrecarga de almacenamiento. Esta forma rica de especificar una cuadrícula no estructurada contrasta con especificaciones más simples de mallas poligonales , como una lista de nodos y elementos, o la conectividad implícita de una cuadrícula regular . Una alternativa a la estructura de datos de borde alado es la estructura de datos de medio borde .
Los registros de caras y vértices son relativamente simples, mientras que el registro de aristas es más complejo.
En resumen, el registro de arista tiene referencias a todos sus registros adyacentes, tanto cuando se desplaza alrededor de un vértice adyacente como cuando se desplaza alrededor de una cara adyacente.
Clase Edge{ Vértice *vert_origen, *vert_destino; Cara *cara_izquierda, *cara_derecha; Borde *borde_izquierdo_cw, *borde_izquierdo_ccw, *borde_derecho_cw, *borde_derecho_ccw;}clase Vértice{ flotar x, y, z; Borde *borde;}cara de clase{ Borde *borde;}