Javascript 拉斐尔画轮

Javascript 拉斐尔画轮,javascript,raphael,Javascript,Raphael,我正试着做所谓的微调。基本上这看起来像: 稍后我会有一些音频播放器,当我们在平板电脑上使用它时,这个东西会帮助我们选择秒数 问题是,当你试图移动红色圆圈时,当它通过绿色圆圈的顶部和底部时,它会奇怪地下降,但不是在0或π/2,比如在-260..-269和181..190度 只要试着移动它,你就会看到错误 我的代码出了什么问题 提前谢谢 更新 最近更新: 在这个例子中,我得到了0..360范围内的度数。但是相反,我应该在开始拖动和结束拖动的点之间得到增量,但是我不能算出数学。我还应该考虑红圈的方向,

我正试着做所谓的微调。基本上这看起来像:

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

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

只要试着移动它,你就会看到错误

我的代码出了什么问题

提前谢谢

更新

最近更新:

在这个例子中,我得到了0..360范围内的度数。但是相反,我应该在开始拖动和结束拖动的点之间得到增量,但是我不能算出数学。我还应该考虑红圈的方向,所以δ是+或-=\

更新

最后:

但是代码真的很糟糕。虽然现在是凌晨2点46分,我有点困,所以。。。
但不管怎样,我认为这可能会更简单,因为当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

或者检查发生的。

,因为当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

或者查看。

哦,谢谢,从未听说过atan2功能。事实上,我认为这不是无穷大问题,因为红色圆圈下降时有几个点。但我还有另一个问题:我更新了我的JSFIDLE示例,我想要实现的就是进行微调。最后,它必须看起来像我在两个方向上旋转红色圆圈,然后慢慢地得到+N或-N,就像试图呃。。。比如说在我的接收器上获得一个必要的频率。但是我认为这个机制是错误的:在我的例子中,我只得到0到360度的度数,所以很难使用这些度数=这里有一个问题-微调控制是否会与粗调控制一起使用?即,一个控件以0.2的间隔将频率从88.0调整到108.0,然后微调控件以0.2的间隔空间进行调整?你打算用它来对付什么样的单位?事实上,我会有一个带音频播放器的打开浏览器的平板电脑。我会用手指选择例如2:23,然后使用这个轮子我会增加或减少一些秒。假设全旋转CW将增加5秒。我正在努力做到这一点,尽管学位有很多问题,代码也变得越来越混乱……明天我将尝试完成它,但我的解决方案似乎不是最好的:哦,谢谢,从来没有听说过atan2函数。事实上,我认为这不是无穷大问题,因为红色圆圈下降时有几个点。但我还有另一个问题:我更新了我的JSFIDLE示例,我想要实现的就是进行微调。最后,它必须看起来像我在两个方向上旋转红色圆圈,然后慢慢地得到+N或-N,就像试图呃。。。比如说在我的接收器上获得一个必要的频率。但是我认为这个机制是错误的:在我的例子中,我只得到0到360度的度数,所以很难使用这些度数=这里有一个问题-微调控制是否会与粗调控制一起使用?即,一个控件以0.2的间隔将频率从88.0调整到108.0,然后微调控件以0.2的间隔空间进行调整?你打算用它来对付什么样的单位?事实上,我会有一个带音频播放器的打开浏览器的平板电脑。我会用手指选择例如2:23,然后使用这个轮子我会增加或减少一些秒。假设全旋转CW将增加5秒。我正在努力做到这一点,尽管学位有很多问题,代码变得越来越凌乱……明天我将尝试完成它,但我的解决方案似乎不是最好的: