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

2つの測定値の差が180°を超えてはならないことも知らない限り、一般的にこれを行うことはできないと思います。角度だけの違いに基づいて、反時計回りに90°回転した線と時計回りに270°回転した線の違いをどのように見分けますか?それ以外の場合は、-の符号を確認するだけで済みますatan2。反時計回りの場合は正、時計回りの場合は負です(参照ポイントによって異なります)。

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

atan2メソッドは、(x、y)ポイントの角度シータを表す-piとpiの間の数値を返します。これは、正の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 に答える