【问题标题】:Animating a Rotating Line动画旋转线
【发布时间】:2014-03-04 05:45:34
【问题描述】:

我正在尝试使用 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,0 原点。
  • 为了尽快获得更好的帮助,请发布MCTaRE(经过测试和可读的最小完整示例)。

标签: java math jpanel awt trigonometry


【解决方案1】:

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

您应该将它们中的每一个乘以一个固定的数量。试试

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

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

【讨论】:

  • 我刚试过,但现在 deltax 和 deltay 的值为 0,它给了我 0 和 -0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2013-05-29
  • 2011-05-20
相关资源
最近更新 更多