如何最好地存储kd树中的行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何最好地存储kd树中的行相关的知识,希望对你有一定的参考价值。
我知道kd-tree传统上用于存储点,但我想存储线。是否最好在每个交叉点拆分kd-tree的分割线?或者只将端点存储到kd中以便最近邻找到?
答案
kd树本身是为点对象设计的。甚至不包括盒子,球体或类似的东西。我相信你可以以某种方式使用存储minx, maxx, miny, maxy, minz, maxz
的6d树;但我不完全确定如何正确查询它。
R*-tree (Wikipedia)可能是更好的选择。它实际上是为具有空间扩展的对象而设计的。如果你查阅相关的出版物,他们甚至会尝试不同的近似复杂对象;例如,它是否能够使它们三角化,使用环形边界,边界框,有趣的是,在某些情况下,5角多边形提供了最好的性能。
无论如何,R * -tree家族可能是一个有趣的选择。
另一答案
好吧,你必须在十字路口分割线条,否则你会遇到树叶重量的麻烦。
另一方面,如果您不使用SAH或任何其他算法来遍历树,您可以随心所欲地使用kd-tree的原始想法。但是如果你受某些传统算法的约束,你必须分割线条。你必须这样做只是因为树的每个叶子都有一个重量(我想在你的情况下它取决于它的线条长度)。
如果你不分割线条,你也会得到错误的树叶重量。不,如果你不分割线,你应该在线所属的两个叶子中复制它们。
另一答案
你必须使用kd树吗?对于扩展原语,bv-tree可能更有效。
以上是关于如何最好地存储kd树中的行的主要内容,如果未能解决你的问题,请参考以下文章