接口 BSPTree.LeafMerger<S extends Space>

类型参数:
S - 空间的类型。
封闭类:
BSPTree<S extends Space>

public static interface BSPTree.LeafMerger<S extends Space>
该接口收集了BSP树叶子节点和另一个BSP树之间的合并操作。

正如Bruce Naylor、John Amanatides和William Thibault在论文Merging BSP Trees Yields Polyhedral Set Operations中所解释的,对于BSP树的操作可以被表达为一种通用的递归合并操作,其中只有最终部分,当操作数之一是叶子时,才特定于实际操作语义。例如,使用布尔属性来标识内部单元格和外部单元格的区域的树将使用四个不同的对象来实现四个集合操作并、交、差和对称差(异或)的最终合并阶段。

  • 方法概要

    修饰符和类型
    方法
    说明
    merge(BSPTree<S> leaf, BSPTree<S> tree, BSPTree<S> parentTree, boolean isPlusChild, boolean leafFromInstance)
    合并叶子节点和树节点。
  • 方法详细资料

    • merge

      BSPTree<S> merge(BSPTree<S> leaf, BSPTree<S> tree, BSPTree<S> parentTree, boolean isPlusChild, boolean leafFromInstance)
      合并叶子节点和树节点。

      此方法在递归合并的最后调用,结果来自tree1.merge(tree2, leafMerger)调用,当涉及的子树之一是叶子时(即其切割超平面为null)。这是唯一需要操作的确切语义的地方。对于树中的所有上层节点,合并操作只是一种通用的分区算法。

      由于最终操作可能是非交换的,因此重要的是知道叶子节点来自实例树(tree1)还是参数树(tree2)。该方法的第三个参数专门用于此目的。对于可交换的操作,可以忽略它。

      BSPTree.insertInTree方法可能对实现此方法有用。

      参数:
      leaf - 叶子节点(其切割超平面保证为null)
      tree - 树节点(其切割超平面可能为null或非null)
      parentTree - 要连接的父树(可能为null)
      isPlusChild - 如果为true且parentTree不为null,则结果树应为其父节点的正子树,如果parentTree为null则忽略
      leafFromInstance - 如果为true,则叶子节点来自实例树(tree1),树节点来自参数树(tree2
      返回:
      合并后的BSP树(可能是参数之一)