【问题标题】:How determine if point is within rectangle given all latitude/longitude coordinates?给定所有纬度/经度坐标,如何确定点是否在矩形内?
【发布时间】:2012-12-07 23:33:14
【问题描述】:

如果给定矩形的所有 4 个角的 x/y 坐标,然后是另一个 x/y,如果左上角为 0,0,则很容易确定该点是否在矩形内。

但是如果坐标是纬度/经度,它们可能是负数(请参阅附件)。在这种情况下是否有一个公式可以工作?

【问题讨论】:

标签: gps latitude-longitude rectangles


【解决方案1】:

在数学上,您可以使用不等式来确定。

编辑:在执行示例时,我注意到您将坐标以逆格式 (y,x) 而不是 (x,y)。在我的示例中,我使用 (x,y) 格式,所以我只是颠倒了顺序以方便解释。

让我们说 A = (-130,10) B = (-100,20) C = (-125,-5) D = (-100,5)

你从你的矩形边缘建立一个不等式:

if( (x,y) < AB && (x,y) > AC && (x,y) > CD && (x,y) < BD) then
    (x,y) belongs to rectangle ABCD
end if

如果所有不等式都为真,那么你的点属于矩形


具体例子:

AB 表示段,但可以用公式表示:y = ax + b

确定a(公式的斜率,而不是点A)你得到的差异

(Ay - By) / (Ax - Bx) 

Ay 表示 A 点的 Y 分量,在这种情况下为 10

这个公式给了我们

(10 - 20) / (-130 - -100) = -10 / -30 = 1/3

现在我们有

y = x/3 + b

我们现在确定 b。我们现在 A 点和 B 点都属于该公式。所以我们用它们中的任何一个来替换公式中的 x,y 值。让我们以 B 点为例:

20 = -100/3 + b

我们隔离 b 给我们:

b = -100 / 60 = -10/6

我们现在有

y = x/3 - (6/10)

所以如果我们要确定点 Z (10, 15) 是否属于你的 retangle,你首先检查 if

y > x/3 - (10/6)

那么在 Z(10, 15) 的情况下:

15 > 10/3 - (10/6)

15 > 10/6

15 > 1.66 is true

所以这条边满足条件。您需要对每条边使用相同的逻辑。

请注意,要确定使用 > 还是

如果您希望点严格位于矩形内,可以使用 ; = 如果矩形边缘上的点也属于矩形。由你决定。

我希望我的解释清楚。如果有些地方不清楚,请随时询问更多。

【讨论】:

  • 我在答案中添加了一个具体示例。希望对您有所帮助。
  • 好吧,看起来很简单,但现在我知道,多边形解决方案中的一般点并不比这更难。
  • 是的,在这种情况下,它是一个矩形,但您可以轻松地对具有多边形段数组的多边形进行验证。
  • 是的,多边形的一般情况是众所周知的,可以用现有的源代码优化解决。见上面的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 2017-07-18
  • 2016-02-03
  • 2012-07-15
  • 2018-08-27
相关资源
最近更新 更多