描述点之间的相对角度(如行车方向)

发布于 2024-09-06 01:40:43 字数 241 浏览 6 评论 0原文

我有一个带有 x、y 坐标的点列表。我知道如何使用 sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2)) 获取点之间的距离以及使用 获取点之间的角度atan2(y1 - y2, x1 - x2)

如何计算点之间的相对角度(左、右、直)?那么,如果我在点 1,到点 2 的相对方向是什么,然后是 2 到 3、3 到 4 等等...

感谢您的帮助!

I have a list of points with x, y coordinates. I know how to get the distance between points with sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2)) and the angle between points with atan2(y1 - y2, x1 - x2).

How can I calculate the relative angle between the points (left, right, straight)? So, if I'm at point 1, what is the relative direction to point 2, then 2 to 3, 3 to 4, etc...

Thanks for any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

像极了他 2024-09-13 01:40:43

调用 atan2($y1 - $y2, $x1 - $x2)

如果它在 π/2 和 3π/2 之间,则它是直的。
如果大于 3π/2 或小于 -3π/2,则为左转。
如果在 -π/2 和 π/2 之间,则为右转。

这是一个图表:

 {3π/2}-------{π/2}-------{π/4}
      | +-----[ +y]-----+ | 
      | |               | | 
      | |               | | 
    {π} [-x]  [0,0]  [+x] {0} 
      | |               | | 
      | |               | | 
      | +-----[ -y]-----+ |
{-3π/2}-------{-π/2}------{-π/4}

Call atan2($y1 - $y2, $x1 - $x2)

If it's between π/2 and 3π/2, it's straight.
If it's more than 3π/2 or less than -3π/2, it's a left turn.
If it's between -π/2 and π/2, it's a right turn.

Here is a diagram:

 {3π/2}-------{π/2}-------{π/4}
      | +-----[ +y]-----+ | 
      | |               | | 
      | |               | | 
    {π} [-x]  [0,0]  [+x] {0} 
      | |               | | 
      | |               | | 
      | +-----[ -y]-----+ |
{-3π/2}-------{-π/2}------{-π/4}
窗影残 2024-09-13 01:40:43

如果您知道从点 2 到 1 以及从点 2 到 3 的角度,那么只需使用 angle_to_3 - angle_to_1(或到下一个负角度到上一个的角度)的问题,您就知道如何计算atan2,还是我弄错了?左/右/直只是对结果进行四舍五入。如果你想以困难的方式做到这一点,你可以旋转你的点,使从 2 到 1 的角度为 0,但这似乎不必要地复杂。

If you know the angle from point 2 to 1, and point 2 to 3, it's just a matter of angle_to_3 - angle_to_1, (or angle to next minus angle to previous) which you know how to calculate with atan2, or am I mistaken? Left /right / straight is just rounding the result. If you want to do it the hard way you can rotate your points so the angle from 2 to 1 is 0, but that seems unnecessarily convoluted.

丢了幸福的猪 2024-09-13 01:40:43

鉴于您的驾驶方向示例,左/右/直的概念仅在与当前行驶方向相关时才有意义。这就是为什么卫星导航装置从第一个转弯开始,或者当您离开地图时“请继续计划的路线”,而不是立即左转/右转等...

如果您知道 x1、y1 到 x2 的角度, y2 那么您可以使用角度 x2,y2 到 x3,y3 指示下一个点的相对方向。如果下一个角度较大,则可能是左转,较小的是右转,并且在第一个角度周围的一定范围内,它将是直行。

Given your example of driving directions, the concept of left/right/straight only make sense in relation to the current direction of travel. This is why SatNav units start with the first turn or "Please proceed to the planned route" when you are off it's map rather than an immediate turn left/right/etc...

If you know the angle of x1,y1 to x2,y2 then you can give an indication of the relative direction for the next point using the angle x2,y2 to x3,y3. If the next angle is greater then it'll probably be a left turn, less is a right turn and within a certain margin around the first angle it'll be straight on.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文