gpt4 book ai didi

javascript - 如何检查一个点相对于其位置和路线是否位于另一个点的后面?

转载 作者:行者123 更新时间:2023-12-03 10:14:27 24 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序高度依赖于地理位置和基于它的计算。其中一个 View 是 ListView ,它提供了用户位置后面的移动 POI 的列表。

+---------------------------+
+------ . ------+
+----- . -----+
+---- . [POI1] ----+
+--- . / ---+
+-- . / --+
+- . / -+
+ [ME] +
+- . -+
+-- . --+
+--- . ---+
+---- [POI2] . ----+
+----- . -----+
+------ .------+
+---------------------------+
/ = user course
..= perpendicular line
[POI1] = in front
[POI2] = Behind

到目前为止,我已经制定了以下步骤:

  1. 获取用户位置
  2. 检索 5 公里半径内的 POI
  3. 以更高的速度和相同的航向(自身航向+/- 45 度)过滤所有兴趣点

下一步是确定哪些 POI 在用户前面,哪些在用户后面。我想到的方法是创建一条垂直于用户路线的无限线(矢量)。 (例如,在东北方向 45 度的航线上,该线将为西北-东南)。然后我需要弄清楚每个 poi 的经纬度是在这条线的前面还是后面,以便知道它是在用户的前面还是后面。

所有这些都是通过 JavaScript 中的纬度和经度完成的。因此,我可能需要某种公式或函数来将两个纬度点相对于第一个点的路线进行相互比较。

到目前为止,Google 还没有提供太多帮助,所以我真的希望有人能解决这个问题!与此同时,我会因为在数学课上没有集中注意力而感到羞愧。

最佳答案

在上图所示的情况下,首先计算 [ME] 和 [POI1] 之间的直线的斜率。一般来说,您想要计算用户和他们要前往的点之间的坡度(即路线的坡度),在本例中为 POI1。为此,请使用点斜率形式获取线斜率,y1 - y2 = m * (x1 - x2),其中 [ME] 具有坐标 (x1,y1),[POI1] 具有坐标 (x2,y2)并求解 m。现在让 z = -1/m。这是垂直线的斜率。

回到点斜率形式,垂直于用户和 POI1 的直线的一般方程为 y - y1 = z * (x-x1)。然后进行代数运算,将方程的形式更改为 y = z * x + b,对于某些 b。更改表格后,将 x 代入 x2。如果 y2 > z * x2 + b,那么我们的不等式将使用“<”符号。否则,我们使用“>”符号。 WLOG,假设我们需要使用“>”符号。然后,对于坐标为 (k,j) 的每个 POI,如果 j > z * k + b,则该点位于用户后面。

我知道这不是特别清楚,特别是如果您有一段时间没有做过这样的几何图形了,所以这里有一个例子。令 [ME] 的坐标为 (1,1),并假设它们朝点 (3,2) 的方向前进。然后,垂直线的斜率由 1 - 2 = m * (1 - 3) 给出,这意味着 m = 1/2。因此,垂直线的斜率 z = -1/(1/2) = -2。现在垂直线的方程由 y - 1 = -2 * (x - 1) 给出,求解 y 后得出 y = -2x + 3。观察 2 > -2*3 + 3。所以,我们的最终结果不等式需要使用“<”号(相反的符号)。最终的不等式由 y < -2x + 3 给出。假设我们有另外两个 POI,坐标为 (0,0) 的 POI2 和坐标为 (4,4) 的 POI3。 POI2 位于 [ME] 后面,因为 0 < -2 * 0 + 3。POI3 位于 [ME] 前面,因为 4 < -2 * 4 + 3 不满足(即 4 < -5 为假)。

希望这有帮助。另外,计算 m 时要小心,因为如果 x1 - x2 = 0,m 将不确定。这仅仅意味着斜率是直上直下的,因此垂直斜率将为 0。同样,如果 m = 0,z 将直上直下。

关于javascript - 如何检查一个点相对于其位置和路线是否位于另一个点的后面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com