1

我正在尝试做所谓的微调。基本上这看起来像:http: //jsfiddle.net/r9KQK/1/

稍后我会有一些音频播放器,当我们在平板电脑上使用它时,这将有助于选择秒数。

问题是当您尝试移动红色圆圈时,当它通过绿色圆圈的顶部和底部时它会奇怪地下降,但不是在 0 或 PI/2 时,例如在 -260..-269 和 181..190 度

只需尝试移动它,您就会看到错误。

我的代码有什么问题?

提前致谢

更新

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

在这个例子中,我得到 0..360 范围内的度数。但是相反,我应该在开始拖动的点和结束拖动的点之间获得 delta 度,但我无法计算出数学。我还应该考虑红圈的方向,这样 delta 将是 + 或 - =\

更新

最后: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 回答