1

いわゆる微調整をしようとしています。基本的にこれは次のようになります: http://jsfiddle.net/r9KQK/1/

後で、オーディオ プレーヤーを用意します。これは、タブレットで使用するときに秒数を選択するのに役立ちます。

問題は、赤い円を移動しようとすると、緑の円の上下を通過するときに奇妙なドロップが発生することですが、0 または PI/2 ではなく、-260..-269 および 181..190 度のようなものです。

動かしてみるだけで、バグが表示されます。

私のコードで何が問題になっていますか?

前もって感謝します

アップデート

最終更新: http://jsfiddle.net/r9KQK/17/

この例では、0..360 の範囲で度を取得します。しかし、代わりに、ドラッグを開始したポイントと終了したポイントの間のデルタ度を取得する必要がありますが、数学を計算できません。デルタが + または - =\ になるように、赤い円の方向も考慮する必要があります。

アップデート

最後に: http://jsfiddle.net/r9KQK/18/

しかし、コードは本当にひどいです。午前 2 時 46 分でちょっと眠いのですが…とにかくもっと単純化できると思います

4

1 に答える 1

5

これは、DeltaX がゼロのときに Math.atan へのパラメーターが無限大になるために発生しています。このコーナーケースを自動的に処理する atan2 を使用することをお勧めします。

function(dx, dy, x, y) 
{
    var deltaY = this.oy + dy - fineTuning.ring.attr('cy');
    var deltaX = this.ox + dx - fineTuning.ring.attr('cx');
    var angle = Math.atan2( deltaY, deltaX );

    // etcetera, etcetera

または、フィドルを確認してください。

于 2012-06-21T17:00:15.700 に答える