问题标签 [octree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
3d - 当树按莫顿代码排序时如何找到八叉树节点的邻居
我有一个八叉树,我想用它在 3D 空间中执行寻路。我正在使用 Morton 代码对节点进行排序,以便能够轻松找到任何给定节点附近的节点。它似乎工作得很好;我抓取的任何节点子集都相对靠近地聚集在一起。我正在努力寻找一种有效的方法来获取节点的直接邻居。
树的早期版本让它细分树,直到叶子都是我想要的大小的相同大小的节点。这使得查找邻居变得容易,因为每个节点之间存在一致的偏移量,因此我可以在我希望找到节点的位置重新计算 Morton 代码,然后根据代码检索节点。但是我试图通过在没有那么多几何图形的区域(例如,我会得到 8 个空孩子的地方)不那么分解它来提高树的效率。结果,我不再知道给定节点可能有多少邻居,也不知道任何邻居的大小(除了它是 2 的幂)。
我最初的想法是在阵列中的任一方向搜索附近的节点,这会起作用,但是我必须撒网太宽才能保证得到所有邻居,而且我会花时间评估大量节点我不需要的。快速测试表明,即使阵列中任一方向的 50 个节点也不能保证获得所有邻居。
树是静态的,所以我也许可以使用上述蛮力方法一次性生成节点的邻居并存储邻居;但我担心这可能会使程序的初始加载时间超出可接受的水平。有没有一种算法可以实时找到邻居?
编辑:改写问题以澄清我在寻找什么以及我尝试过什么。
algorithm - Barnes-Hut 树创建
我目前正在尝试创建一个 Barnes-Hut 八叉树,但是,我仍然不完全了解如何正确执行此操作。我已经阅读了这里的主题、这篇文章和其他一些内容。如果每个节点都包含有关内部粒子索引的信息,并且如果您继续存储空节点,我相信我确实了解如何制作树。但如果你不想呢?如何制作一棵树,最终您将只有必要的信息:例如,所有非空节点的单极子和四极子。老实说,我做了很多不同的尝试,现在我完全糊涂了。我应该在每个节点中包含什么?这种东西的伪代码是什么?
PS顺便问一下,单极子和四极子有区别吗?我的意思是我可以想象你不需要关于节点内粒子的确切信息来计算单极子(它只是一个完整的节点质量),但是对于四倍?
先感谢您!
PS 顺便说一句,如果有某种相关性,我会使用 julia 语言。
java - 最小化java中大树的开销
我需要在 Java 中实现一个大的八叉树。树会很大,所以我需要使用分页机制,将树拆分成许多小文件,以便长期存储。
我担心的是 Java 对象的空间开销非常高。如果我使用 C,我将能够存储 8 个引用指针和任何其他数据,只需一个字节左右的开销来存储节点类型。
有什么方法可以在 Java 中处理这种级别的开销?
我很想每个文件只使用一个字节数组。然后我可以使用偏移量代替指针(这就是我计划存储文件的方式)。但是,即使限制了最大文件大小,这也很容易让我的数组太大而无法放入连续的内存中,尤其是在该内存变得严重碎片化的情况下。这也将导致添加新节点的大量时间开销,因为需要重新分配整个空间。ByteBuffer 可能会解决第一个问题(我不完全确定这一点),但是它不会解决第二个问题,因为 ByteBuffer 的大小是静态的。
目前我只会坚持使用节点对象。如果有人知道更节省空间且时间成本更低的解决方案,请告诉我。
point-cloud-library - 给定体素的点索引
我需要使用 PCL 的八叉树数据结构将我的数据划分为体素。我想我设法创建了八叉树和体素。但是,我有两个关于 PCL 八叉树结构的问题。
- 我的第一个问题是关于八叉树的分辨率。我定义了如下所示的分辨率:
float resolution = 0.009f; pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(resolution);
据我了解,此分辨率参数定义了八叉树最低级别的体素边长的尺寸。在这种情况下,最低级别的体素边长等于0.009m,是否正确?
- 如何获取每个体素的点索引?假设第一个体素中有五个点,我需要这些点的索引。我期待着收到您的来信
ios - ios - Gamekit 的 GKOctree 未找到元素
我正在尝试使用GKOctree来有效地检索 3D 空间中的对象。但是,以下代码似乎无法按预期工作:
3d - 稀疏体素八叉树平滑网格化
我一直在我们的 God Google 上进行了几次搜索,但没有找到任何文章以直观的方式解释以下问题:
我知道八叉树在理论上是如何工作的(“还没有”实现过)。我想要的是一种算法方法,如何获取节点数据,并生成平滑的、基于三角形的网格,就像 Marching Cubes 所做的那样(我什至不知道八叉树是否使用行进立方体......)。
基本上,我想知道如何将多个“立方体”尺度的顶点连接在一起。
在类似 Minecraft 的空间(地球是平的)中,对于 Marching Cubes,这很容易做到,因为它认为所有立方体大小相同,但在八叉树中,子节点的大小是其父节点的一半。我怎样才能对这些不同的立方体进行网格划分?
任何解释/链接/任何将不胜感激!
c++ - 参考包装向量,push_back 失败?
我有一个给我带来麻烦的问题;我的目标是创建一个八叉树。
实际上,它非常便宜(但对于我想用那个八叉树做的事情几乎足够了)。
我的问题是我std::vector<std::reference_wrapper<Point>>
充满了相同的值。所以我的插入创建了一个无限循环。但这是代码,也许它会更容易理解。我在发生错误的地方添加了评论。
源码.cpp
八叉树.hpp
Node.hpp(出现问题的地方)
我真的不明白我做错了什么。
java - 八叉树堆栈溢出错误
美好的一天,我正在实施八叉树。但是,当输入大小大于 2 时,我一直收到 StackOverflowError。我不知道为什么会收到此错误。
八叉树的实例化
其中第一个参数是维度,第二个参数是根
八叉树人口的代码:
八叉树的 add_nodes 代码
错误:
希望有人能回答。谢谢!