Implicit Binary Tree
ImplicitBVH.ImplicitTree — Typestruct ImplicitTree{T<:Integer}Implicit binary tree for num_leaves elements, where nodes are labelled according to a breadth-first search.
Methods
ImplicitTree(num_leaves::Integer)
ImplicitTree{T}(num_leaves::Integer)Fields
levels::Integer: Number of levels in the tree.real_leaves::Integer: Number of real leaves - i.e. the elements from which the tree was constructed.real_nodes::Integer: Total number of real nodes in tree.virtual_leaves::Integer: Number of virtual leaves needed at the bottom level to have a perfect binary tree.virtual_nodes::Integer: Total number of virtual nodes in tree needed for a complete binary tree.
Examples
julia> using ImplicitBVH
# Given 5 geometric elements (e.g. bounding boxes) we construct the following implicit tree
# having the 5 real leaves at implicit indices 8-12 plus 3 virtual leaves.
# Nodes & Leaves Tree Level
# 1 1
# 2 3 2
# 4 5 6 7v 3
# 8 9 10 11 12 13v 14v 15v 4
julia> tree = ImplicitTree(5)
ImplicitTree{Int64}
levels: Int64 4
real_leaves: Int64 5
real_nodes: Int64 11
virtual_leaves: Int64 3
virtual_nodes: Int64 4
# We can keep all tree nodes in a contiguous vector with no extra padding for the virtual
# nodes by computing the real memory index of real nodes; e.g. real memory index of node 8
# skips node 7 which is virtual:
julia> memory_index(tree, 8)
7
# We can get the range of indices of real nodes on a given level
julia> level_indices(tree, 3)
(4, 6)
# And we can check if a node at a given implicit index is virtual
julia> isvirtual(tree, 6)
false
julia> isvirtual(tree, 7)
trueImplicitBVH.memory_index — Functionmemory_index(tree::ImplicitTree, implicit_index::Integer)Return actual memory index for a node at implicit index i in a perfect BFS-labelled tree.
ImplicitBVH.level_indices — Functionlevel_indices(tree::ImplicitTree, level::Integer)Return range Tuple{Int64, Int64} of memory indices of elements at level.
ImplicitBVH.isvirtual — Functionisvirtual(tree::ImplicitTree, implicit_index::Integer)Check if given implicit_index corresponds to a virtual node.