2014-02-07 154 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。 –