lunes, agosto 14, 2006

Blobs

BlobsXSight RT despega en complejidad. La imagen adyacente muestra un tipo de sólido llamado blob (en inglés, claro). La figura mostrada, en particular, es no convexa: una línea puede tener más de dos puntos de intersección con uno de estos sólidos.
¿Qué es un blob y cómo se define? La variante implementada por XSight RT se define ubicando esferas en el espacio. El centro de cada esfera define entonces un campo de fuerza, cuya intensidad decrece a medida que nos alejamos del centro de la esfera. Si los campos de dos esferas se solapan en una zona, sus respectivas intensidades se suman. Entonces se define un valor deseado para la intensidad, y la superficie del blob se define como los puntos en los que la intensidad de campo es igual al valor elegido. El resultado es que dos esferas, inicialmente disjuntas, pueden "soldarse" entre sí mediante una superficie continua y suave, como la del ejemplo.
El modelo usado por XSight RT es un subconjunto de los blobs implementados por POV Ray. POV Ray permite usar también cilindros como elementos dentro de un blob, pero espero poder ampliar mi implementación. Lo interesante de estos objetos es que para calcular las intersecciones sólo necesitamos resolver una ecuación polinomial de cuarto grado... de forma similar a lo que ocurre con los toros (las rosquillas, no los bichos con cuernos). Y lo mejor de todo es que XSight RT tiene un algoritmo de resolución para ecuaciones cuárticas muy eficientes. Una ecuación de cuarto grado se resuelve mediante una ecuación auxiliar de tercer grado. Pero de esta ecuación auxiliar sólo se necesita la primera raíz (de las tres posibles), y los coeficientes de la ecuación auxiliar tienen una forma especial. Mientras otros sistemas resuelven una ecuación auxiliar "completa", calculando las tres raíces, XSight RT utiliza un algoritmo optimizado.

Etiquetas: , ,