Comienzas con un campo escalar 3D. Esto podría ser cualquier cosa, datos de resonancia magnética, fuentes de calor blobby, una función matemática, lo que sea. Solo algún tipo de función que toma una posición 3D como entrada y genera un solo valor escalar.
La superficie se define para todos los puntos donde el campo escalar es igual a un cierto valor. Depende de usted cómo lo define, pero me gusta tener valores positivos como ‘dentro’, y valores negativos como fuera. Donde el campo es igual al umbral, esa es la superficie real.
Luego divide el espacio en una cuadrícula de cubitos y muestra el campo en las esquinas de cada cubo (reutilizando obviamente los valores calculados previamente).
- Cómo demostrar la corrección de un algoritmo de búsqueda lineal para el ejercicio 2.1-3 en CLRS
- ¿Cuáles son los beneficios de los algoritmos? No los encuentro importantes.
- ¿Cómo son útiles las estructuras de datos?
- ¿Es mejor representar aristas en un gráfico que sale de un vértice como miembros de una matriz dinámica o una lista vinculada?
- ¿Cuáles son algunos proyectos desafiantes en algoritmo genético para principiantes?
Cada esquina puede estar dentro o fuera (en la superficie debe elegir, dependiendo de la implementación). Entonces ese es el valor booleano. Para 8 puntos de esquina, tienes 2 ^ 8 = 256 situaciones posibles.
Si todas las esquinas están afuera, entonces el espacio está vacío y no hay nada que hacer. Si todos los puntos están dentro, nuevamente, nada que hacer, el cubo está dentro de la carcasa hueca. Sin embargo, si algunos están adentro y otros afuera, entonces debes crear algo de geometría.
Entonces, determina qué situación es y utiliza una tabla de búsqueda para ver el número y la conectividad de los triángulos que debe crear dentro del cubo.
Armado con esta información, debe determinar los puntos donde los 12 bordes del cubo se cruzan con la superficie (esto generalmente se hace interpolando linealmente entre el valor escalar en los puntos finales del borde).
Luego, solo une los puntos de intersección en triángulos dependiendo de los datos de conectividad para la situación en la que se encuentra el cubo.
Al final, habrás discretizado el espacio en montones de triángulos.
Ahora, hay algunas mejoras para hacer. Primero, algunas situaciones son ambiguas, por lo que es posible que necesite muestrear el campo en el centro del cubo para desambiguar algunas situaciones. Además, los cubos de marcha estándar a menudo crean triángulos pequeños o astillas muy delgadas. Hay métodos para evitar esto.
Pero eso es básicamente todo. Esta página es un muy buen lugar para comenzar, con una explicación clara, imágenes y código fuente.