在无限的2D空间中有一组线条,每条线条都有一个起点和终点,以及一个创作时间:Line(p0, p1, t)
。
我想找到应该在这个2D空间的自顶向下视图中渲染的线条(更高的t值显示在更靠近视口的地方,而不是它应该是相关的。)
直观的答案是“检查一个点是否在视口坐标范围内”,但是当这些点比视口区域覆盖的距离更远时会出现这种情况。
我的另一个想法是使用像geohash之类的东西,这会限制精度,即视口的最大缩放级别。这个想法是枚举相交的细胞的哈希并存储它们。这种查询方式就是提出正确的问题。
有没有理想的解决方案?这是否已经解决了?
答案 0 :(得分:0)
我认为你需要检查两个条件:一个是视口的矩形与带角的矩形重叠(p0,p1),第二个是视口矩形的某些角落在包含线段的整行的不同边上(P0,P1)。
对于使用R树(http://en.wikipedia.org/wiki/R-tree)的大量矩形,可以非常有效地解决找到矩形重叠的任务。
第二项任务可以简化为检查(p1-p0)x(corner_coordinate-p0)的叉积的符号 (所有三个量作为三维矢量,第三个坐标等于零,结果将是沿垂直方向的矢量)。应该有与此交叉产品相反符号的角落。