描述点之间的相对角度(如行车路线)

时间:2010-06-16 15:04:03

标签: php driving-directions map-directions

我有一个带有x,y坐标的点列表。我知道如何获得sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2))点与点atan2(y1 - y2, x1 - x2)之间的距离。

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

致电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}

答案 1 :(得分:0)

如果您知道从第2点到第1点以及第2点到第3点的角度,那么您知道如何使用atan2计算angle_to_3 - angle_to_1,(或与下一个减去前一个角度的角度),还是我弄错了?左/右/直接只是将结果四舍五入。如果你想以一种艰难的方式做到这一点,你可以旋转你的点,使得从2到1的角度为0,但这似乎是不必要的错综复杂。

答案 2 :(得分:0)

考虑到你的驾驶方向的例子,左/右/直的概念只对当前的旅行方向有意义。这就是为什么SatNav单位从第一个回合开始,或者“当你离开它的地图时,请继续前进到计划路线”,而不是立即左转/右转等......

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