Javascript 如何测试一条线是否相对于另一条线顺时针旋转?

Javascript 如何测试一条线是否相对于另一条线顺时针旋转?,javascript,math,geometry,2d,line,Javascript,Math,Geometry,2d,Line,在下面的代码中,我想确保一条直线相对于另一条直线顺时针旋转。我想顺时针走的那条线有角度targetAngle var dX=line.start.x-someOtherPoint.x; var dY=line.start.y-someOtherPoint.y; var lastAngle=数学atan2(dY,dX); var dX=line.start.x-line.end.x; var dY=line.start.y-line.end.y; var targetAngle=数学atan2(d

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

var dX=line.start.x-someOtherPoint.x;
var dY=line.start.y-someOtherPoint.y;
var lastAngle=数学atan2(dY,dX);
var dX=line.start.x-line.end.x;
var dY=line.start.y-line.end.y;
var targetAngle=数学atan2(dY,dX);
if(目标角度<最后角度){
//是逆时针的
}否则{
//是顺时针的
}

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

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

if (targetAngle < 0)
    targetAngle = targetAngle + 360
if(目标角度<0)
目标角度=目标角度+360

这样你就不必处理消极的角度。或者按照这些思路做一些事情。

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

if (targetAngle < 0)
    targetAngle = targetAngle + 360
if(目标角度<0)
目标角度=目标角度+360

这样你就不必处理消极的角度。或者沿着这些路线做一些事情。

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

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


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

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

更改此选项:

if (targetAngle < lastAngle) {
if(targetAngle
为此:

if (targetAngle < lastAngle && !(targetAngle < 0 && lastAngle > 0)) {
if(targetAngle0)){
似乎可以做到这一点。

改变这一点:

if (targetAngle < lastAngle) {
if(targetAngle
为此:

if (targetAngle < lastAngle && !(targetAngle < 0 && lastAngle > 0)) {
if(targetAngle0)){
似乎很管用。

或者只是:
targetAngle=(targetAngle%2*pi+2*pi)%2*pi
,它适用于任何
targetAngle
,而不仅仅是区间
[-2*pi,2*pi]
中的值。可能会有一些不准确的地方,不过:)或者只是:
targetAngle=(targetAngle%2*pi+2*pi)%2*pi
,它适用于任何
目标角度
,而不仅仅是区间
[-2*pi,2*pi]
中的值。但可能会出现一些不准确的情况:)