动画旋转线

时间:2014-02-07 00:42:15

标签: java math jpanel awt trigonometry

我正在尝试使用我的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);
}

它开始很好,但它很快就开始出现一些意想不到的结果。

1 个答案:

答案 0 :(得分:0)

在没有看到实际结果的情况下很难确定,但我强烈怀疑它出错了,因为你在变量deltaX和deltaY中添加了一个固定常数。

您应该将每个数字乘以固定数量。尝试

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

如果这还不够,请增加乘数;如果太多,请减少它。