【问题标题】:Algorithm to detect when and where a point will exit a rectangle area检测点何时何地离开矩形区域的算法
【发布时间】:2017-10-18 11:11:09
【问题描述】:

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

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

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

【问题讨论】:

  • 正方形/矩形的边是否与指南针的方向对齐?
  • 是的,它们是对齐的。
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topichow to ask 在这里申请。球坐标中的时间和运动是教科书和在线记录的主题。
  • 如果您对代码有疑问,请发布Minimal, complete, verifiable example(根据发布指南)。

标签: algorithm scala gps gis


【解决方案1】:

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

请注意,对于地理坐标,您可能需要更复杂的计算,因为由纬度/经度坐标定义的“矩形”在地球表面实际上是弯曲的梯形。查看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

【讨论】:

  • 将您的算法置于平面而非球形(地球)中进行测试,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 度转换为以弧度表示的航向?
  • 即使我将其转换为弧度,结果也不正确。
  • 您是否将速度转换为正确的单位? (如果距离以公里为单位,您仍然需要将速度从 km/h 转换为 km/s,除以 3600。)
  • @Al Jenssen Direction 90 度假设 vx 或 vy (取决于选择的坐标系) 为零,因此一个交点坐标必须与起点坐标重合,但您的结果绝对显示大约 26 度的方向。也许你实现了一些错误的表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
相关资源
最近更新 更多