二元空间划分树的几何结构

问题描述 投票:0回答:1

我正在为 2D 空间实现 BSP 树。确定线相对于分割向量的位置时存在问题。 (前后)。就我而言,使用具有正值的坐标平面,为什么标量积不太可能有帮助。你能帮忙解决问题吗?

曾有一个想法可以使用直线方程来解决这个问题,但结果证明该方法过于冗长并且不是最有效的。许多网站只提到标量积,但不幸的是,没有任何地方对前后进行解释。至于数据结构本身,有了解。

geometry binary-tree bsp space-partitioning bsp-tree
1个回答
0
投票

使用 2D BSP,您组织的对象通常是线段或多边形之类的东西。这些对象中的每一个都将由点的集合表示。要查看测试对象相对于分界线(或更高维度的平面/超平面)是否位于正面或背面(或两者),您可以迭代这些点并根据该线对它们进行分类。如果所有点都在线的正面,则物体在线的前面,反之亦然。如果某些点在前面而其他点在后面,则该对象横跨该线。

如果您使用标准 Ax + By + C = 0 表示分界线,那么您只需从对象中取出每个点 p = (x, y),计算 Ax + By + C,如果结果为正,则该点位于该行的“前面”,如果它是负数,则同样。如果为零,则该点位于线上,为了 BSP,您可以将其视为位于前面。

如果您想将 A 和 B 存储在向量中,那么标量积/点积可以在这里提供帮助,然后该向量将成为直线的法向量 N。然后,您可以计算 dot(N, p) 并将其与 -C 进行比较以对每个点进行分类。

对于使用轴对齐平面构建 BSP 树的更简单情况,您的分界线也会更简单 - x 或 y 将只是一个常数。也就是说,我建议您仍然使用点积,酌情允许 A 或 B 为零。您的代码会简单得多,因为平行于不同轴的线不必有不同的情况。

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