C++ 在八叉树中存储具有共享边的三角形

C++ 在八叉树中存储具有共享边的三角形,c++,structure,octree,C++,Structure,Octree,我试图加载一个STL网格文件,并将其三角形存储在八叉树数据结构中,以便进行一些科学分析(不用于游戏) 如图所示,三角形1存储在八叉树节点NE、SE、SW和NW中,而三角形2存储在八叉树节点NW和SW中。(2d表示,但3d中的情况相同) 将节点NW和SW分开是没有意义的,因为这两个三角形 共享红边。如果我有两个以上的三角形跨越几个单元格,这个问题就会变得更麻烦 那么,用八叉树存储三角形的正确方法是什么 ps-我不想剪裁三角形。我使用了两种最常用的方法: 在与三角形相交的每个叶节点中存储三角形;

我试图加载一个STL网格文件,并将其三角形存储在八叉树数据结构中,以便进行一些科学分析(不用于游戏)

如图所示,三角形1存储在八叉树节点NE、SE、SW和NW中,而三角形2存储在八叉树节点NW和SW中。(2d表示,但3d中的情况相同)

将节点NW和SW分开是没有意义的,因为这两个三角形 共享红边。如果我有两个以上的三角形跨越几个单元格,这个问题就会变得更麻烦

那么,用八叉树存储三角形的正确方法是什么


ps-我不想剪裁三角形。

我使用了两种最常用的方法:

  • 在与三角形相交的每个叶节点中存储三角形;因此,一个三角形可能在多个叶中
  • 将三角形存储在完全包围三角形的节点(树枝或树叶)中;没有重复的
第一种方法对于粗略的、轴对齐的物体形状估计很有用,可以解决紧密堆积问题。基本上是非均匀体素化。第二种方法非常适合碰撞检测。每个三角形都需要与同一节点及其子节点中的其他三角形碰撞。第二种方法产生了相当轻量级的实现(您可以在直接指向三角形的指针旁边添加链表)