1

在下面的代码中,我想确保一条线相对于另一条线顺时针旋转。我想顺时针走的线有角度targetAngle

var dX = line.start.x - someOtherPoint.x;
var dY = line.start.y - someOtherPoint.y;
var lastAngle = Math.atan2(dY, dX);

var dX = line.start.x - line.end.x;
var dY = line.start.y - line.end.y;
var targetAngle = Math.atan2(dY, dX);

if (targetAngle < lastAngle) {
    // is going counter clockwise
} else {
    // is going clockwise
}

此代码在大多数情况下都有效,但在targetAngle低于 0 时会中断。

4

3 回答 3

1

我只是粗略地看了一眼,但如果它只在 targetAngle 低于零时中断,请添加如下检查:

if (targetAngle < 0)
    targetAngle = targetAngle + 360

这样,您就不必处理负角。或者无论如何都按照这些方式做一些事情。

于 2013-01-20T21:46:27.777 回答
0

我认为你一般不能这样做,除非你也知道两次测量之间的差异不能超过 180°。您如何仅根据角度之间的差异来区分逆时针旋转 90° 的线与顺时针旋转 270° 的线之间的差异?否则,您只需要检查符号atan2- 逆时针为正,顺时针为负(取决于您的参考点)。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/atan2

atan2 方法返回一个介于 -pi 和 pi 之间的数值,表示 (x,y) 点的角度 theta。这是正 X 轴和点 (x,y) 之间的逆时针角度,以弧度为单位。

于 2013-01-20T21:53:03.613 回答
0

改变这个:

if (targetAngle < lastAngle) {

对此:

if (targetAngle < lastAngle && !(targetAngle < 0 && lastAngle > 0)) {

似乎可以解决问题。

于 2013-01-20T22:24:43.200 回答