Geometry 如何查找与二维视口相交的线段

Geometry 如何查找与二维视口相交的线段,geometry,Geometry,在无限的2D空间中有一组线,每一行都有一个起点和终点,以及创建时间:line(p0,p1,t) 我想找到应该在该二维空间的自顶向下视图中渲染的线(t值越高,显示的距离视口越近,而不是应该相关) 直观的答案是“检查任一点是否在视口坐标范围内”,但当点之间的距离超过视口区域的覆盖范围时,就会出现这种情况 我的另一个想法是使用这样的东西,这会限制精度,即视口的最大缩放级别。其思想是枚举相交单元格的散列并存储它们。这种方式就是提出正确的问题 有什么理想的解决方案吗?这个问题以前解决过吗?我认为您需要检查

在无限的2D空间中有一组线,每一行都有一个起点和终点,以及创建时间:
line(p0,p1,t)

我想找到应该在该二维空间的自顶向下视图中渲染的线(t值越高,显示的距离视口越近,而不是应该相关)

直观的答案是“检查任一点是否在视口坐标范围内”,但当点之间的距离超过视口区域的覆盖范围时,就会出现这种情况

我的另一个想法是使用这样的东西,这会限制精度,即视口的最大缩放级别。其思想是枚举相交单元格的散列并存储它们。这种方式就是提出正确的问题


有什么理想的解决方案吗?这个问题以前解决过吗?

我认为您需要检查两个条件:一个是视口的矩形与带角的矩形重叠(p0,p1),另一个是视口矩形的某些角位于包含线段(p0,p1)的整条直线的不同侧面

使用R-树()可以非常有效地解决查找大量矩形重叠的任务

第二项任务可以简化为检查(p1-p0)x(角点坐标-p0)的叉积的符号
(所有三个量作为三维矢量,第三个坐标等于零,结果将是沿垂直方向的矢量)。应该有与此叉积符号相反的拐角

好的,这是一棵R树。您知道MongoDB中的R树引用实现吗?MongoDB有内置的空间索引,是否适用于此?我不确定自己是否理解
角坐标
的含义,视口至少有两个角,因为它是一个矩形。如果我把它解释为西南角是(0,0),而
角坐标是东北角,那就没有意义了!考虑一条线P0=(- 2,-1);p1=(7,4)和从(0,0)到c=(3,2)的视口<代码>(p1-p0)x(c-p0)=(7+2,4+1)x(3+2,2+1)=(9,5)x(5,3)=2
。这是正确的,因为这条线与视口矩形相交,但然后考虑P1=(5, 5),它也与视口相交:<代码>(P1-P0)x(C-P0)=-9 < /COD>!我的意思是,您需要检查视口的所有4个角,并找出是否所有角都为叉积提供了相同的符号(在这种情况下,直线不与视口相交),或者某些角提供了不同的符号。如果这不清楚,很抱歉。