如果我有N个节点,如何找到Octree中的级别数量?

时间:2019-07-02 16:12:21

标签: algebra octree

如果八叉树等级为0,那么我有8个节点。现在,如果八叉树等级为1,则我有72个节点。但是,如果有(例如)500个节点,如何计算级别?

1 个答案:

答案 0 :(得分:0)

要计算级别n的最大节点数,您将计算:

8**1 + 8**2 + 8**3 ... 8**n

因此,在第2级,它是8 + 64

这可以概括为:

((8 ** (h + 1)) - 1)/7 - 1

在javascript中,您可能会这样写:

function maxNodes(h){
  return ((8 ** (h + 1)) - 1)/7 - 1
}

for (let i = 1; i < 4; i++){
  console.log(maxNodes(i))
}

要找到逆,您将需要使用对数基数8和一些代数,您将得出一个公式:

floor (log(base-8)(7 * n + 1))

在某些语言(例如python)中,您可以计算math.floor(math.log(7*n + 1, 8)),但是javascript的日志没有任意基数,因此您需要依赖身份:

Log(base-b)(n) == Log(n)/Log(b)

并计算如下:

function height(n){
    return Math.floor(Math.log(7 * n + 1)/Math.log(8))
}

console.log(height(8))
console.log(height(72))  // last on level 2
console.log(height(73))  // first on level 3
console.log(height(584)) // last on level 3
console.log(height(585)) // first on level 4