2012-06-20 65 views
1

我正在試圖做出所謂的微調的東西。基本上這看起來像:http://jsfiddle.net/r9KQK/1/在raphaeljs畫一個輪子

後來我會有一些音頻播放器,這個東西將有助於選擇秒,當我們在平板電腦上使用它。

問題是當您嘗試移動它在綠色圓圈的頂部和底部傳遞時奇怪地掉落的紅色圓圈,但不是在0或PI/2處,如-260 ..- 269和181。 .190度

試着移動它,你會看到錯誤。

我的代碼有什麼問題?

在此先感謝

更新

最後更新時間:http://jsfiddle.net/r9KQK/17/

在這個例子中,我得到度0..360範圍。但是,我應該從我開始拖動到結束它的點之間獲得三角度,但是我無法計算出數學。我還應該考慮到的紅色圓圈的方向,使增量將是+或 - = \

更新

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

但是代碼確實是可怕的。雖然是凌晨2點46分,我有點困,所以... 但無論如何,我認爲它可以更簡化

回答

5

這是因爲你的參數Math.atan達到無窮大,當DeltaX爲零。我建議使用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 

或檢查fiddle

+0

哦,謝謝,從來沒有聽說過atan2函數。其實我認爲這不是無限的問題,因爲紅圈下降時有幾點。但是我還有另一個問題:我更新了我的jsfiddle示例,我想要實現的就是「微調」。最後,它必須看起來像我在兩個方向上旋轉紅色圓圈,慢慢地+ N或-N,就像試圖呃...讓我說我的接收者得到一個必要的頻率。但看起來我認爲這種機制是錯誤的:在我的例子中,我只能從0度到360度,所以很難處理這些度數=( – Victor

+0

那麼這裏有一個問題 - 微調控制是否與「coarse 「調諧控制,也就是說,一個控制將頻率從88.0調整到108.0,間隔爲0.2,然後微調控制在0.2間隔範圍內進行調整,您打算使用哪種單位? –

+0

實際上,我我會用手指選擇例如2:23,然後使用這個輪子來增加或減少幾秒鐘,比方說完整的旋轉CW會增加5秒。我試圖做到這一點,雖然有很多程度的問題,並且代碼變得越來越混亂......明天我會盡力完成它,但似乎我的解決方案不是最好的:) – Victor