我在2D整数空间中有大量的“线段”和“线”。鉴于此设置,我希望将其存储在内存中,使得以下方法/查询的延迟最小化。我正在寻找一种语言无关的数据结构,它最有效地满足以下条件,以及为什么它是一个不错的选择。
说明:
- 点 - 点由(X,Y)对表示。这些是Int64s
- 线段 - 一对点。在这些点中,一个是“开始”而另一个是“结束”
- 三角形 - 一组三点,或者也可以由三个线段定义,形成最简单的几何形状
操作
- IsPointInTriangle(Point) - 如果给定点位于任意存储的三角形内,则返回True / False
- IsPointOnLine Segment(Point) - 返回True / False是一个位于线段上的给定点
- DoesLine SegmentCrossOtherLine细分(细分细分) - 如果给定的细分受众群跨越任何其他细分细分,则返回True / False
- GetPotentialTriangles(Line Segment) - 如果此Line Segment已添加到将要创建的集合中,则返回一组潜在的Triangles。这将返回一个由3个点/线段组成的零线段,构成零+三角形。
目标和假设:
- 操作和数据驻留在内存中。存储成本不是问题
- 操作不一定是线程安全的。每个操作都将按顺序进行
- 将存储位于现有Triangle中的点数
- 将不会存储位于现有线段
的点
- 将存储跨越现有线段
的线段
- 减少每次计算的延迟是最终目标。所有其他问题都是次要的。