如何最好地存储kd树中的行

问题描述 投票:8回答:3

我知道kd-tree传统上用于存储点,但我想存储线。是否最好在每个交叉点拆分kd-tree的分割线?或者只将端点存储到kd中以便最近邻找到?

data-structures raytracing kdtree
3个回答
1
投票

kd树本身是为点对象设计的。甚至不包括盒子,球体或类似的东西。我相信你可以以某种方式使用存储minx, maxx, miny, maxy, minz, maxz的6d树;但我不完全确定如何正确查询它。

R*-tree (Wikipedia)可能是更好的选择。它实际上是为具有空间扩展的对象而设计的。如果你查阅相关的出版物,他们甚至会尝试不同的近似复杂对象;例如,它是否能够使它们三角化,使用环形边界,边界框,有趣的是,在某些情况下,5角多边形提供了最好的性能。

无论如何,R * -tree家族可能是一个有趣的选择。


0
投票

好吧,你必须在十字路口分割线条,否则你会遇到树叶重量的麻烦。

另一方面,如果您不使用SAH或任何其他算法来遍历树,您可以随心所欲地使用kd-tree的原始想法。但是如果你受某些传统算法的约束,你必须分割线条。你必须这样做只是因为树的每个叶子都有一个重量(我想在你的情况下它取决于它的线条长度)。

如果你不分割线条,你也会得到错误的树叶重量。不,如果你不分割线,你应该在线所属的两个叶子中复制它们。


0
投票

你必须使用kd树吗?对于扩展原语,bv-tree可能更有效。

© www.soinside.com 2019 - 2024. All rights reserved.