用于检测点何时何地退出矩形区域的算法

时间:2017-10-18 11:11:09

标签: algorithm scala gps gis

假设我们有一个矩形或正方形,我们知道它的角落的x,y坐标(4个角)。

还假设我们在该广场内有一个点,我们知道它的坐标(x,y),它的速度(km / h),它的航向(航向是以方向度测量的,0是北方,180是南方等等)和它具有这些属性的时间点(以秒为单位的纪元时间)。

我们如何计算点将退出矩形的时间点(以秒为单位的纪元时间)以及出口的坐标(x,y)?

1 个答案:

答案 0 :(得分:1)

您需要先找到相交的边缘。制作用于沿两个坐标移动的方程式并计算第一次交叉时间。

请注意,对于地理坐标,您可能需要更复杂的计算,因为Lat / Lon坐标定义的“矩形”在地球表面上确实是弯曲的梯形。在this page上查看“给定起点和方位的两条路径的交点”以获取旅行时间。

vx = V * Cos(heading + Pi/2)   //for y-axis north=0
vy = V * Sin(heading + Pi/2)

x = x0 + vx * t
y = y0 + vy * t

//potential border positions    
if vx > 0 then
   ex = x2
else
   ex = x1

if vy > 0 then
   ey = y2
else
   ey = y1

 //check for horizontal/vertical directions
if vx = 0 then
return cx = x0,  cy = ey, ct = (ey - y0) / vy

if vy = 0 then
    return cx = ex, cy = y0, ct = (ex - x0) / vx


//in general case find times of intersections with horizontal and vertical edge line
  tx = (ex - x0) / vx
  ty = (ey - y0) / vy

 //and get intersection for smaller parameter value
 if tx <= ty then 
    return cx = ex, cy = y0 + tx * vy, ct = tx
 else
    return  cx = x0 + ty * vx,  cy = ey,  ct = ty