Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置旋转线的动画_Java_Math_Jpanel_Awt_Trigonometry - Fatal编程技术网

Java 设置旋转线的动画

Java 设置旋转线的动画,java,math,jpanel,awt,trigonometry,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 = (

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

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

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

相反,你应该用一个固定的数量乘以它们。试一试

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

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

意外的结果是什么?这有点难以解释,但它会旋转一点,然后停止,然后开始向内收缩,然后不知何故,它看起来像是在那里并排画线,最后在0,0原点重新开始。为了更快地获得更好的帮助,请发布(最小完整测试和可读示例)。我刚刚尝试过,但现在deltax和deltay值为0,它给了我0和-0。