找到两点之间角度的+/-符号的公式?

时间:2012-02-29 15:36:41

标签: c++ trigonometry

我一直试图找到一个公式,以确定一辆汽车是否在给定两组坐标的情况下左转或右转。 x1,y1为t秒,x2,y2为t + 1秒。到目前为止,我一直在使用它:

double direction = atan2(y2 - y1, x2 - x1)

然后,我检查方向是正还是负,以确定汽车是向左还是向右转。这有效,但我根本不需要知道方向的。我只需要这个标志。另外,我想放弃使用昂贵的atan2。我可以使用另一个公式吗?谢谢!


EDIT1:

我有速度。两点之间的时间总是相隔一秒,因此可以根据需要进行计算。


EDIT2: 这就是我的意思:我正在处理来自不是100%现实的交通模拟的数据。通常,我有汽车的标题(以度为单位)。但是,当汽车改变车道时,航向不准确(似乎是对角线行驶)。因此,在这种情况下,我已经确定汽车正在改变车道。我需要将汽车的航向倾斜20度左右。我只需要找出改变航向的方向,这就是为什么我需要弄清楚汽车在改变车道时“转向”的方向。

2 个答案:

答案 0 :(得分:2)

当且仅当 y 组件为正时,

atan2才为正。

答案 1 :(得分:1)

假设你有一辆汽车,用速度u驱动,v在点x1,y1在时间t和时间t + 1 x2,y2然后方向由

给出
int turnleft = sgn(-v * (x2-x1) + u * (y2-y1));

例如根据Is there a standard sign function (signum, sgn) in C/C++? sgn

更多解释:

如果位置变化和法线速度之间的标量乘积大于零,则向左转。速度的旋转是向左(逆时针)。因此,如果向左转,则turnleft为1;如果向右转,则为turnleft;如果向右转,则为-1。

啊,我忘记了:还有一种情况,你完全没有转身。相应更新