问题描述
我正在尝试仅使用不可变数据结构来构建边界体积层次结构。我希望将树用于实时仿真中的宽相碰撞测试。
树形结构如下:
type BvhTree<'t> =
| Leaf of BvhLeaf<'t>
| Branch of BvhBranch<'t>
| Nil
and BvhLeaf<'t> =
{
Bounds : AABB
Data : 't
}
and BvhBranch<'t> =
{
Bounds : AABB option
Left : BvhTree<'t>
Right : BvhTree<'t>
}
然后的目标是获取所有具有边界体积的模拟对象列表(为使事情简单,现在仅使用ABB),并产生合理的最佳边界体积层次结构。
最佳树的定义是其分支节点的表面积总计最低的树。
测试每个可能的树结构的速度太慢,简单的附加操作会创建一棵偏斜的树,从而导致较差的碰撞测试性能。可能还可以使用先前模拟状态中的树作为起点来计算下一棵树。
由于我使用的是不可变数据,因此与通常采用的方法不同(请参见this excellent set of slides),我必须从头开始构建树。
我无法找到有关该主题的很多资源。
我想出的基本方法是生成一棵树列表,每个模拟对象一个树,然后递归合并它们,直到仅剩下一棵树。在每个步骤,都使用简单的启发式方法选择合并。
有什么好的技巧可以做到这一点?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)