2014-02-07 184 views
0

我想從我的jpanel中的awt.Graphics包中繪製函數drawline的一條線。我也試圖通過從原點開始完整旋轉360度來旋轉線條。我已經掌握了大部分內容,期望邏輯能夠旋轉那條線。動畫旋轉線

這裏是動畫的主要代碼,我有一個調用這個函數每60次每秒線程:

public void Update(){ 
    degrees = (++degrees%360 == 0) ? 0 : degrees; 
    angle = Math.toRadians(degrees); 
    deltax = (Math.cos(angle) * deltax - Math.sin(angle) * deltay) + 100; 
    deltay = (Math.sin(angle) * deltax + Math.cos(angle) * deltay) + 100; 
} 

我加入了一個額外的100,因爲變化似乎是非常微小的。

更新值後,我會調用我的框架重新繪製自身,並使用這些更新值。

public void paintComponent(Graphics graph) 
{ 
    super.paintComponent(graph); 
    //... other code here 

    graph.drawLine(getWidth()/2, getHeight()/2, (int)deltax, (int) deltay); 
} 

它開始很好,但它很快就開始顯示出一些意想不到的結果。

+0

什麼是意想不到的結果? – BitNinja

+0

這是很難解釋,但它旋轉了一下,然後停止後,它開始向內收縮,然後不知何故,它看起來像它畫在彼此相鄰的線路,最終在0,0原點重新開始。 –

+0

爲了儘快提供更好的幫助,請發佈[MCTaRE](http://stackoverflow.com/help/mcve)(最小完整測試和可讀示例)。 –

回答

0

在沒有看到實際結果的情況下很難確定地說,但是我強烈懷疑它會出錯,因爲您要爲變量deltaX和deltaY添加一個固定的常量。

您應該將它們中的每一個乘以固定的數量。嘗試

deltax = (Math.cos(angle) * deltax - Math.sin(angle) * deltay) * 100; 
deltay = (Math.sin(angle) * deltax + Math.cos(angle) * deltay) * 100; 

如果這還不夠,增加乘數;如果太多,減少它。

+0

我剛試過,但現在deltax和deltay的值都是0,它給了我0和-0。 –