描述点之间的相对角度(如驾驶方向)

问题描述:

我有一列带有x,y坐标的点。我知道如何获得sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2))之间的点与atan2(y1 - y2, x1 - x2)之间的点之间的距离。描述点之间的相对角度(如驾驶方向)

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

感谢您的任何帮助!

+1

点之间没有“相对方向”。点没有与他们相关的方向。你只能找到两者之间的距离,或者一个矢量与原点根之间的绝对角度。如果你想要一个“相对方向”,你需要在当前点和前一个点之间定义一个矢量,然后获得该相对矢量的绝对角度和当前点的矢量的绝对角度之间的角度差到下一点... – ircmaxell 2010-06-16 15:10:59

+0

我真的不知道你的意思是点之间的角度,因为它总是180度(如直线)。但是你真正需要的是两条*线*之间的角度。你需要一个开始的方向,所以请将点1调至点2“直线”。然后你可以计算两条线(点1 - 点2)和(点2-点3)之间的角度。 – 2010-06-16 15:28:12

呼叫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}
+0

我已经这么做了。我只需要了解如何解释结果,我猜... – aan234g 2010-06-16 15:10:18

+1

这是一个以弧度表示的角度。 – SLaks 2010-06-16 15:16:47

+2

这不是假设你在3π/ 2和π/ 2之间开始面对吗?如果你开始面临0,那么这是一个完全不同的球赛。假设这与SatNav系统类似,那么转向只能从x2,y2开始确定,因为需要x1,y1到x2,y2来确定方向。 – Lazarus 2010-06-16 15:25:20

如果你知道,从2点到1之间的夹角,和点2至3,它只是一个angle_to_3 - angle_to_1事,(或角度来下一个负角度以前)你知道如何用atan2来计算,还是我误解了?左/右/直线只是四舍五入的结果。如果你想要做到这一点,你可以旋转你的点,所以从2到1的角度是0,但这似乎不必要的复杂。

考虑到您的行车路线示例,左/右/直线的概念只与当前的行驶方向有关。这就是为什么SatNav单位开始时的第一回合或“请继续计划的路线”,当你离开它的地图,而不是立即转左/右/等......

如果你知道x1的角度, y1到x2,y2然后您可以使用角度x2,y2到x3,y3指示下一个点的相对方向。如果下一个角度更大,那么它可能是左转,右转更少,并且在第一个角度附近的某个边界内,它将直线上升。