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

Algorithm 检测点何时何地退出矩形区域的算法,algorithm,scala,gps,gis,Algorithm,Scala,Gps,Gis,假设我们有一个矩形或正方形,我们知道它的角点(4个角点)的x,y坐标 还假设我们在正方形内有一个点,我们知道它的坐标(x,y)、速度(km/h)、航向(航向以定向度测量,北为0,南为180等等)以及它具有这些属性的时间点(以秒为单位的历元时间) 我们如何计算该点将退出矩形的时间点(以秒为单位的历元时间)以及退出的坐标(x,y)?您需要先找到哪条边相交。建立沿两个坐标移动的方程式,并计算第一次相交的时间 请注意,对于地理坐标,您可能需要更复杂的计算,因为Lat/Lon坐标定义的“矩形”在地球表面上

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

还假设我们在正方形内有一个点,我们知道它的坐标(x,y)、速度(km/h)、航向(航向以定向度测量,北为0,南为180等等)以及它具有这些属性的时间点(以秒为单位的历元时间)


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

您需要先找到哪条边相交。建立沿两个坐标移动的方程式,并计算第一次相交的时间

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

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
vx=V*Cos(航向+Pi/2)//对于y轴北=0
vy=V*Sin(航向+Pi/2)
x=x0+vx*t
y=y0+vy*t
//可能的边界位置
如果vx>0,则
ex=x2
其他的
ex=x1
如果vy>0,则
ey=y2
其他的
ey=y1
//检查水平/垂直方向
如果vx=0,则
返回cx=x0,cy=ey,ct=(ey-y0)/vy
如果vy=0,则
返回cx=ex,cy=y0,ct=(ex-x0)/vx
//一般情况下,查找与水平和垂直边缘线相交的时间
tx=(ex-x0)/vx
ty=(ey-y0)/vy
//并获得较小参数值的交点

如果tx在平面而非球面(地球)上测试算法,x0=8.0,y0=2.0(我假设这些是该点的坐标),t=1508327031(该点具有这些属性的epcoh秒),V=5.0 km/h,航向=90.0(方向度),x1=0.0,x2=10.0,y1=0.0,y2=10.0(我还假设这些值是矩形的最小/最大X/Y坐标)我得到的结果是cx=4.0、cy=0.0和ct=0.89,这是错误的。@AlJenssen您是否将90度转换为弧度的航向?即使我将其转换为弧度,结果也是错误的。您是否将速度转换为正确的单位?(如果距离是以公里为单位测量的,您仍然需要将速度从公里/小时除以3600转换为公里/秒。)@Al Jenssen方向90度假设vx或vy(取决于所选坐标系)为零,因此一个交点坐标必须与起点坐标重合,但您的结果肯定显示方向约为26度。可能您实现的某些表达式错误。正方形/矩形的边是否与指南针的方向对齐?是的,它们对齐。欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。并在此处应用。球坐标中的时间和运动在教科书和在线上都有很好的记录。如果您对代码有问题,请发布(根据发布指南)。