algorithm - 二维矢量图形的最佳数据存储算法

标签 algorithm opengl graphics vector 2d

我正在开发一个非常简单易用但功能强大的 2D 跨平台 CAD 软件包。我知道已经有一些这样的东西了,但我这样做更多的是为了学习经验而不是其他任何事情。

我使用 OpenGL 进行渲染,并且希望能够在鼠标移到每个实体上时突出显示该实体。我有用于查找实体上最近的点等的算法,但我不想为每次移动扫描实体的整个数据存储。

我研究过四叉树、kd 树等,但我迷失的是如何使用它们来缩小整个实体的焦点。我见过的大多数例子似乎都是面向“点”的。我假设我想要基于边界矩形进行索引,然后对该矩形内的这些实体进行最近点搜索。

有人能指出我正确的方向吗?

最佳答案

“Kd树”的思考方向是正确的。现在,您必须更进一步,将您的点扩展到具有位置和附加参数的多维基元。毕竟 Kd 的意思是“K 维度”。

因此,对于圆或圆弧,您可以将中心位置存储在树的前两个维度中,然后将半径存储在第三个维度中(对于一组二维基元)。对于所有其他非圆形的基元,只需假设一个圆形边界区域。

对于线性基元,您可能需要查看 BSP 树。当然,您可以将 Kd 的概念与 BSP 结合起来,例如对弯曲图元使用类似 Kd 的节点,对由线性凸段界定的图元使用 BSP。

关于algorithm - 二维矢量图形的最佳数据存储算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11616594/

相关文章:

algorithm - 知道对顺序的一组元素的排序算法

c++ - 无法在 OpenGL 上使用不同的 VAO 渲染不同的网格

c - 旋转形状变为旋转和平移

c - OpenGL:响应键盘问题

html - 停止时 SGV 梯度变暗

android - 任何算法来检查包含特定颜色的每个像素?在安卓 :)

algorithm - 优化方法(元启发式、基于图形的、MILP)

java - Bresenham 的画线算法的错误

c++ - 通过合并排序计算数组中的反转

ios - 还有比这更有效的画棋盘的方法吗?