有效地测试射线和三角交叉点 - 存储器数据结构

时间:2015-01-30 22:19:36

标签: performance math data-structures 2d processing-efficiency

我在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中的点数
  • 将不会存储位于现有线段
  • 的点
  • 将存储跨越现有线段
  • 的线段
  • 减少每次计算的延迟是最终目标。所有其他问题都是次要的。

0 个答案:

没有答案