我有一个带有 x, y 坐标的点列表。我知道如何获得点之间的距离和点sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2))
之间的角度 atan2(y1 - y2, x1 - x2)
。
如何计算点之间的相对角度(左、右、直)?所以,如果我在点 1,那么点 2 的相对方向是什么,然后是 2 到 3、3 到 4 等等......
谢谢你的帮助!
我有一个带有 x, y 坐标的点列表。我知道如何获得点之间的距离和点sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2))
之间的角度 atan2(y1 - y2, x1 - x2)
。
如何计算点之间的相对角度(左、右、直)?所以,如果我在点 1,那么点 2 的相对方向是什么,然后是 2 到 3、3 到 4 等等......
谢谢你的帮助!
如果它在 π/2 和 3π/2 之间,它是直的。
如果大于 3π/2 或小于 -3π/2,则为左转。
如果它在 -π/2 和 π/2 之间,则为右转。
这是一个图表:
{3π/2}-------{π/2}--------{π/4} | +-----[ +y]-----+ | | | | | | | | | {π} [-x] [0,0] [+x] {0} | | | | | | | | | +-----[ -y]-----+ | {-3π/2}--------{-π/2}-----{-π/4}
如果您知道从点 2 到 1 以及从点 2 到 3 的angle_to_3 - angle_to_1
角度,那么您知道如何用 atan2 计算它只是一个问题(或到下一个负角到上一个的角度),还是我弄错了?左/右/直只是四舍五入的结果。如果你想以艰难的方式来做,你可以旋转你的点,使从 2 到 1 的角度为 0,但这似乎不必要地令人费解。
鉴于您的行驶方向示例,左/右/直的概念仅在与当前行进方向相关时才有意义。这就是为什么 SatNav 装置在您离开地图时从第一个转弯或“请继续按照计划的路线”开始,而不是立即左/右/等转...
如果您知道 x1,y1 到 x2,y2 的角度,那么您可以使用角度 x2,y2 到 x3,y3 来指示下一个点的相对方向。如果下一个角度较大,则可能是左转,较少是右转,并且在第一个角度周围的一定范围内,它将是直行的。