Algorithm 二维矢量图形的最佳数据存储算法
我正在开发一个非常简单易用但功能强大的2D跨平台CAD软件包。我知道已经有了一些,但我这么做更多的是为了学习经验,而不是其他任何东西 我正在使用OpenGL进行渲染,我希望能够在鼠标移动到每个实体上时高亮显示它。我有在实体上找到最近点的算法,等等,但我不想扫描每个移动的实体的整个数据存储 我已经看过四叉树、kd树等,但我不知道如何使用它们来缩小整个实体的焦点。我看到的大多数例子似乎都是以“点”为导向的。我假设我希望基于边界矩形建立索引,然后对该矩形内的实体进行最近点搜索 有人能为我指出正确的方向吗?认为“Kd树”是正确的方向。现在,您必须更进一步,将点扩展为具有位置和其他参数的多维基本体。Kd毕竟意味着“K维” 因此,对于圆或圆弧,将在树的前二维中存储中心位置,然后在第三维中存储半径(对于一组二维基本体)。对于所有其他非圆形的基本体,只需假设一个圆形边界区域Algorithm 二维矢量图形的最佳数据存储算法,algorithm,opengl,graphics,vector,2d,Algorithm,Opengl,Graphics,Vector,2d,我正在开发一个非常简单易用但功能强大的2D跨平台CAD软件包。我知道已经有了一些,但我这么做更多的是为了学习经验,而不是其他任何东西 我正在使用OpenGL进行渲染,我希望能够在鼠标移动到每个实体上时高亮显示它。我有在实体上找到最近点的算法,等等,但我不想扫描每个移动的实体的整个数据存储 我已经看过四叉树、kd树等,但我不知道如何使用它们来缩小整个实体的焦点。我看到的大多数例子似乎都是以“点”为导向的。我假设我希望基于边界矩形建立索引,然后对该矩形内的实体进行最近点搜索 有人能为我指出正确的方向
对于线性基本体,您可能希望查看BSP树。当然,您可以将Kd的概念与BSP结合起来,比如对弯曲的基本体使用类似Kd的节点,对由线性凸段限定的基本体使用BSP。空间划分背后的思想是减少测试的数量(及其计算需求)为了获得可以使用更精细的方法测试的原语子集,您需要执行 关于必须使用整个实体的边界框并首先确定移动时鼠标下的实体,您是对的 您还有其他一些选择:
还有很多其他我肯定会错过的东西——我会在想到更多的时候再加上它们。:)希望这有帮助 听起来你在寻找类似的东西,它们是基于面向轴的边界框的树,其中(与K-d树不同)允许兄弟子树的框重叠。如果我没记错的话,有很多基于不同更新启发的变化 关于空间数据结构的明确参考,其中包括许多关于R-树及其亲属的信息:
- 《多维和度量数据结构的基础》,Hanan Samet著