stringtranslate.com

Árbol kd implícito

Construcción y almacenamiento de un árbol d de k máximo implícito en 2D utilizando la función de división de la mediana de la cuadrícula. Cada celda de la cuadrícula rectilínea tiene asignado un valor escalar desde bajo (azul brillante) hasta alto (rojo brillante). La huella de memoria de la cuadrícula se indica en la línea inferior. La huella de memoria predefinida del árbol d de k máximo implícito necesita un valor escalar menor que ese. El almacenamiento de los valores máximos del nodo se indica en la línea superior.

Un árbol k -d implícito es un árbol k -d definido implícitamente sobre una cuadrícula rectilínea . Las posiciones y orientaciones de sus planos de división no se dan explícitamente, sino implícitamente, mediante una función de división recursiva definida en los hiperrectángulos que pertenecen a los nodos del árbol . El plano de división de cada nodo interno se posiciona en un plano de cuadrícula de la cuadrícula subyacente, lo que divide la cuadrícula del nodo en dos subcuadrículas.

Nomenclatura y referencias

Los términos " árbol k -d min/max " y " árbol k -d implícito" a veces se confunden. Esto se debe a que la primera publicación que utilizó el término "árbol k -d implícito" [1] en realidad utilizó árboles k -d min/max explícitos, pero se refirió a ellos como " árboles k -d implícitos" para indicar que se pueden utilizar para trazar rayos de superficies iso dadas implícitamente. Sin embargo, esta publicación también utilizó árboles k -d delgados que son un subconjunto de los árboles k -d implícitos con la restricción de que solo se pueden construir sobre hiperrectángulos enteros con longitudes laterales que sean potencias de dos. Los árboles k -d implícitos como se definen aquí se han introducido recientemente, con aplicaciones en gráficos de computadora. [2] [3] Como es posible asignar atributos a los nodos de árboles k -d implícitos, se puede hacer referencia a un árbol k -d implícito que tiene valores min/max asignados a sus nodos como un "árbol k -d min/max implícito ".

Construcción

Los árboles k -d implícitos generalmente no se construyen explícitamente. Al acceder a un nodo, la orientación y la posición de su plano de división se evalúan utilizando la función de división específica que define el árbol. Diferentes funciones de división pueden generar diferentes árboles para la misma cuadrícula subyacente.

Funciones de división

Las funciones de división pueden adaptarse a propósitos especiales. A continuación se describen dos especificaciones de clases de funciones de división especiales.

Una función de división completa es, por ejemplo, la función de división de la mediana de la cuadrícula . Crea árboles k -d implícitos bastante equilibrados mediante el uso de hiperrectángulos enteros de dimensión k hyprec[2][k] que pertenecen a cada nodo del árbol k -d implícito. Los hiperrectángulos definen qué celdas de la cuadrícula de la cuadrícula rectilínea pertenecen a su nodo correspondiente. Si el volumen de este hiperrectángulo es igual a uno, el nodo correspondiente es una celda de cuadrícula única y, por lo tanto, no se subdivide más y se marca como nodo hoja. De lo contrario, la extensión más larga del hiperrectángulo se elige como orientación o . El plano de división correspondiente p se coloca sobre el plano de cuadrícula que está más cerca de la mediana de la cuadrícula del hiperrectángulo a lo largo de esa orientación.

Orientación del plano dividido o :

o = min{argmax(i = 1 ... k : (hyprec[1][i] - hyprec[0][i]))}

Posición del plano dividido p :

p = redondearAbajo((hyprec[0][o] + hyprec[1][o]) / 2)

Asignación de atributos a implícitosa-d nodos del árbol

Una ventaja de los árboles k -d implícitos es que las orientaciones y posiciones de sus planos divididos no necesitan almacenarse explícitamente.

Pero algunas aplicaciones requieren, además de las orientaciones y posiciones del plano de división, otros atributos en los nodos del árbol interno. Estos atributos pueden ser, por ejemplo, bits individuales o valores escalares individuales que definen si las subcuadrículas que pertenecen a los nodos son de interés o no. Para árboles k- d implícitos completos, es posible preasignar una matriz de atributos de tamaño correcto y asignar cada nodo interno del árbol a un elemento único en esa matriz asignada.

La cantidad de celdas de la cuadrícula es igual al volumen del hiperrectángulo entero que pertenece a la cuadrícula. Como un árbol k- d implícito completo tiene un nodo interno menos que celdas de la cuadrícula, se sabe de antemano cuántos atributos se deben almacenar. La relación " Volumen del hiperrectángulo entero con respecto a los nodos internos " define, junto con la función de división completa, una fórmula recursiva que asigna a cada plano de división un elemento único en la matriz asignada. El algoritmo correspondiente se proporciona en el código pseudo C a continuación.

// Asignación de atributos a los nodos internos de un árbol kd implícito completo// crea un hiperrectángulo entero de ayuda hyprec (su volumen vol(hyprec) es igual a la cantidad de hojas) int hyprec [ 2 ][ k ] = { { 0 , ..., 0 }, { length_1 , ..., length_k } }; // asigna una vez la matriz de atributos para todo el árbol kd implícito attr * a = new attr [ volume ( hyprec ) - 1 ];                    attr implicitKdTreeAttributes ( int hyprec [ 2 ][ k ], attr * a ) { if ( vol ( hyprec ) > 1 ) // el nodo actual es un nodo interno { // evalúa la orientación o del plano de división y su posición p usando la función de división completa subyacente int o , p ; completeSplittingFunction ( hyprec , & o , & p ); // evalúa los hiperrectángulos enteros de los hijos hyprec_l y hyprec_r int hyprec_l [ 2 ][ k ], hyprec_r [ 2 ][ k ]; hyprec_l = hyprec ; hyprec_l [ 1 ][ o ] = p ; hyprec_r = hyprec ; hyprec_r [ 0 ][ o ] = p ; // evalúa la ubicación de memoria de los hijos a_l y a_r attr * a_l = a + 1 ; attr * a_r = a + vol ( hyprec_l ); // evaluar recursivamente los atributos de los hijos c_l y c_r attr c_l = implicitKdTreeAttributes ( hyprec_l , a_l ); attr c_r = implicitKdTreeAttributes ( hyprec_r , a_r ); // fusionar los atributos de los hijos con el atributo actual c attr c = merge ( c_l , c_r ); // almacenar el atributo actual y retornarlo a [ 0 ] = c ; return c ; } // El nodo actual es un nodo hoja. Devuelve el atributo que pertenece a la celda de la cuadrícula correspondiente return attribute ( hyprec ); }                                                                         

Cabe mencionar que este algoritmo funciona para todas las cuadrículas rectilíneas. El hiperrectángulo entero correspondiente no necesariamente tiene que tener lados que sean potencias de dos.

Aplicaciones

Los árboles implícitos max- k -d se utilizan para la proyección de isosuperficies de rayos /MIP ( proyección de intensidad máxima ). El atributo asignado a cada nodo interno es el valor escalar máximo dado en la subcuadrícula que pertenece al nodo. Los nodos no se recorren si sus valores escalares son menores que el valor iso buscado/intensidad máxima actual a lo largo del rayo. Los bajos requisitos de almacenamiento del árbol implícito max- k -d y la favorable complejidad de visualización de la proyección de rayos permiten proyectar rayos (e incluso cambiar la isosuperficie) en campos escalares muy grandes a velocidades de cuadros interactivas en PC de consumo. De manera similar, se puede utilizar un árbol implícito min/max kd para evaluar de manera eficiente consultas como la línea de visión del terreno . [4]

Complejidad

Dado un árbol k -d implícito distribuido en una cuadrícula k -dimensional con n celdas de cuadrícula.

Véase también

Referencias

  1. ^ Ingo Wald, Heiko Friedrich, Gerd Marmitt, Philipp Slusallek y Hans-Peter Seidel "Trazado de rayos de isosuperficie más rápido utilizando árboles KD implícitos" IEEE Transactions on Visualization and Computer Graphics (2005)
  2. ^ Matthias Groß, Carsten Lojewski, Martin Bertram y Hans Hagen "Árboles k -d implícitos rápidos : trazado de rayos de isosuperficie acelerado y proyección de máxima intensidad para grandes campos escalares" CGIM07: Actas de Computer Graphics and Imaging (2007) 67-74
  3. ^ Matthias Groß (PhD, 2009) Hacia aplicaciones científicas para la proyección de rayos interactiva
  4. ^ Bernardt Duvenhage "Uso de un árbol KD mín/máx implícito para realizar cálculos eficientes de la línea de visión del terreno" en "Actas de la 6ª Conferencia internacional sobre gráficos por computadora, realidad virtual, visualización e interacción en África", 2009.