5

何よりもまず、私は数学が絶対に極悪であると言わせてください。

円上の 2 点間の角度を計算しようとしています。この 2 点は、ユーザーが一定時間内にドラッグした距離です。

これは私がこれまでに持っているものです:

intervalId = setInterval(function(){

      if(p1x != undefined){
        p2x = Xpos;

      }

      if(p1y != undefined){
        p2y = Ypos;
      }


      if( p1x != p2x || p1y != p2y ){

        p1a = p1x - wheelMiddleVer;
        p1b = p1y - wheelMiddleHor;
        a = Math.sqrt((p1a * p1a) + (p1b * p1b));

        p2a = p2x - wheelMiddleVer;
        p2b = p2y - wheelMiddleHor;
        b = Math.sqrt((p2a * p2a) + (p2b * p2b));

        u = p1x - p2x;
        v = p1y - p2y;
        c = Math.sqrt((u * u) + (v * v));


      }

      p1x = Xpos;
      p1y = Ypos;


  }, 1000);

どうやって終わらせたらいいのかわからない。cos A = (b^2 + c^2 - a^2)/2bc 式を使用してみましたが、うまくいきません。これについてのご意見をお待ちしております。質問をより明確にすることができれば、私に知らせてください。

4

2 に答える 2

6

まず、ほとんどの言語では Y 軸が反転していることに注意してください。つまり、スケールのポイントが高いほど、Y 値が小さくなります。

あなたの質問については、arctan を使用する必要があります。

var angle = Math.atan((p1y - p2y) / (p2x - p1x)) * (180 / Math.PI);
于 2013-03-10T12:46:11.717 に答える
0

まず、始点と終点の違いを見つけます。

deltaY = P2_y - P1_y 
deltaX = P2_x - P1_x

次に、arctanを使用して角度を計算します

angleInDegrees = atan2(deltaY ,deltaX) * 180 / PI
于 2013-03-10T12:41:12.487 に答える