Implicit kd-tree
Encyclopedia
An implicit k-d tree is a k-d tree defined implicitly above a rectilinear grid. Its split plane
Plane (mathematics)
In mathematics, a plane is a flat, two-dimensional surface. A plane is the two dimensional analogue of a point , a line and a space...

s' positions and orientation
Orientation (geometry)
In geometry the orientation, angular position, or attitude of an object such as a line, plane or rigid body is part of the description of how it is placed in the space it is in....

s are not given explicitly but implicitly by some recursive
Recursive
Recursive may refer to:*Recursion, the technique of functions calling themselves*Recursive function, a total computable function*Recursive language, a language which is decidable...

 splitting-function defined on the hyperrectangle
Hyperrectangle
In geometry, an orthotope is the generalization of a rectangle for higher dimensions, formally defined as the Cartesian product of intervals....

s belonging to the tree's node
Node (computer science)
A node is a record consisting of one or more fields that are links to other nodes, and a data field. The link and data fields are often implemented by pointers or references although it is also quite common for the data to be embedded directly in the node. Nodes are used to build linked, often...

s. Each inner node's split plane is positioned on a grid plane of the underlying grid, partitioning the node's grid into two subgrids.

Nomenclature and references

The terms "min/max k-d tree" and "implicit k-d tree" are sometimes mixed up. This is because the first publication using the term "implicit k-d tree" did actually use explicit min/max k-d trees but referred to them as "implicit k-d trees" to indicate that they may be used to ray trace implicitly given iso surfaces. Nevertheless this publication used also slim k-d trees which are a subset of the implicit k-d trees with the restriction that they can only be built over integer hyperrectangles with sidelengths that are powers of two. Implicit k-d trees as defined here have shortly after been introduced. A nice overview to implicit k-d trees can be found in. As it is possible to assign attributes to implicit k-d tree nodes, one may refer to an implicit k-d tree which has min/max values assigned to its nodes as an "implicit min/max k-d tree".

Construction

Implicit k-d trees are in general not constructed explicitly. When accessing a node, its split plane orientation and position are evaluated using the specific splitting-function defining the tree. Different splitting-functions may result in different trees for the same underlying grid.

Splitting-functions

Splitting-functions may be adapted to special purposes. Underneath two specifications of special splitting-function classes.
  • Non-degenerated splitting-functions do not allow the creation of degenerated nodes (nodes whose corresponding integer hyperrectangle's volume is equal zero). Their corresponding implicit k-d trees are full binary tree
    Binary tree
    In computer science, a binary tree is a tree data structure in which each node has at most two child nodes, usually distinguished as "left" and "right". Nodes with children are parent nodes, and child nodes may contain references to their parents. Outside the tree, there is often a reference to...

    s, which have for n leaf nodes n - 1 inner nodes. Their corresponding implicit k-d trees are non-degenerated implicit k-d trees.

  • complete splitting-functions are non-degenerated splitting-functions whose corresponding implicit k-d tree's leaf nodes are single grid cells such that they have one inner node less than the amount of gridcells given in the grid. The corresponding implicit k-d trees are complete implicit k-d trees.


A complete splitting function is for example the grid median splitting-function. It creates fairly balanced implicit k-d trees by using k-dimensional integer hyperrectangles hyprec[2][k] belonging to each node of the implicit k-d tree. The hyperrectangles define which gridcells of the rectilinear grid belong to their corresponding node. If the volume of this hyperrectangle equals one, the corresponding node is a single grid cell and is therefore not further subdivided and marked as leaf node. Otherwise the hyperrectangle's longest extend is chosen as orientation o. The corresponding split plane p is positioned onto the grid plane that is closest to the hyperrectangle's grid median along that orientation.

Split plane orientation o:
o = min{argmax(i = 1 ... k: (hyprec[1][i] - hyprec[0][i]))}
Split plane position p:
p = roundDown((hyprec[0][o] + hyprec[1][o]) / 2)

Assigning attributes to implicit k-d tree-nodes

An obvious advantage of implicit k-d trees is that their split plane's orientations and positions need not to be stored explicitly.

But some applications require besides the split plane's orientations and positions further attributes at the inner tree nodes. These attributes may be for example single bits or single scalar values, defining if the subgrids belonging to the nodes are of interest or not. For complete implicit k-d trees it is possible to pre-allocate a correctly sized array of attributes and to assign each inner node of the tree to a unique element in that allocated array.

The amount of gridcells in the grid is equal the volume of the integer hyperrectangle belonging to the grid. As a complete implicit k-d tree has one inner node less than grid cells, it is known in advance how many attributes need to be stored. The relation "Volume of integer hyperrectangle to inner nodes" defines together with the complete splitting-function a recursive formula assigning to each split plane a unique element in the allocated array. The corresponding algorithm is given in C-pseudo code underneath.

// Assigning attributes to inner nodes of a complete implicit k-d tree

// create an integer help hyperrectangle hyprec (its volume vol(hyprec) is equal the amount of leaves)
int hyprec[2][k] = , ;
// allocate once the array of attributes for the entire implicit k-d tree
attr *a = new attr[volume(hyprec) - 1];

attr implicitKdTreeAttributes(int hyprec[2][k], attr *a)
{
if(vol(hyprec) > 1) // the current node is an inner node
{
// evaluate the split plane's orientation o and its position p using the underlying complete split-function
int o, p;
completeSplittingFunction(hyprec, &o, &p);
// evaluate the children's integer hyperrectangles hyprec_l and 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;
// evaluate the children's memory location a_l and a_r
attr* a_l = a + 1;
attr* a_r = a + vol(hyprec_l);
// evaluate recursively the children's attributes c_l and c_r
attr c_l = implicitKdTreeAttributes(hyprec_l, a_l);
attr c_r = implicitKdTreeAttributes(hyprec_r, a_r);
// merge the children's attributes to the current attribute c
attr c = merge(c_l, c_r);
// store the current attribute and return it
a[0] = c;
return c;
}
// The current node is a leaf node. Return the attribute belonging to the corresponding gridcell
return attribute(hyprec);
}

It is worth mentioning that this algorithm works for all rectilinear grids. The corresponding integer hyperrectangle does not necessarily have to have sidelengths that are powers of two.

Applications

Implicit max-k-d trees are used for ray casting
Ray casting
Ray casting is the use of ray-surface intersection tests to solve a variety of problems in computer graphics. It enables spatial selections of objects in ascene by providing users a virtual beam as a visual cue extending...

 isosurface
Isosurface
An isosurface is a three-dimensional analog of an isoline. It is a surface that represents points of a constant value within a volume of space; in other words, it is a level set of a continuous function whose domain is 3D-space.Isosurfaces are normally displayed using computer graphics, and are...

s/MIP (maximum intensity projection
Maximum intensity projection
In scientific visualization, a maximum intensity projection is a volume rendering method for 3D data that projects in the visualization plane the voxels with maximum intensity that fall in the way of parallel rays traced from the viewpoint to the plane of projection...

). The attribute assigned to each inner node is the maximal scalar value given in the subgrid belonging to the node. Nodes are not traversed if their scalar values are smaller than the searched iso-value/current maximum intensity along the ray. The low storage requirements of the implicit max kd-tree and the favorable visualization complexity of ray casting allow to ray cast (and even change the isosurface for) very large scalar fields at interactive framerates on commodity PCs. Similarly an implicit min/max kd-tree
Min/max kd-tree
A min/max kd-tree is a kd-tree with two scalar values - a minimum and a maximum - assigned to its nodes. The minimum/maximum of an inner node is equal the minimum/maximum of its children's minima/maxima.-Construction:...

 may be used to efficiently evaluate queries such as terrain line of sight
Line of sight (gaming)
Line of sight, sometimes written line-of-sight or abbreviated to LoS, is a term used in wargames and some role-playing games . It refers to visibility on the playing field. Many abilities can only be used against an enemy within line of sight.In some games, miniature figures are used to determine...

.

Complexity

Given an implicit k-d tree spanned over an k-dimensional grid with n gridcells.
  • Assigning attributes to the nodes of the tree takes O
    Big O notation
    In mathematics, big O notation is used to describe the limiting behavior of a function when the argument tends towards a particular value or infinity, usually in terms of simpler functions. It is a member of a larger family of notations that is called Landau notation, Bachmann-Landau notation, or...

    (kn) time.
  • Storing attributes to the nodes takes O(n) memory.
  • Ray casting iso-surfaces/MIP an underlying scalar field using the corresponding implicit max k-d tree takes roughly O(lg(n)) time.
The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK