如何在轴上旋转Area对象,同时沿y轴移动它?

时间:2015-06-19 01:31:43

标签: java rotation graphics2d area affinetransform

所以我有一个我创建的Area对象并制作成一个4星多边形。我想要做的是旋转此对象,同时沿y轴平移。 这是我用来创建对象的点的代码,而星的中心是xloc和yloc,下面是paint函数:

double rots = 0.0; int xPoints[] = { 45, 48, 56, 48, 45, 42, 34, 42 }; int yPoints[] = { 56, 47, 45, 43, 34, 43, 45, 47 }; double xloc = 150, yloc = 250;

public void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    RenderingHints rh = new RenderingHints( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);    
    g2d.setRenderingHints(rh);

   g2d.translate(xloc, yloc);
   g2d.rotate(rots); 

    g2d.fill(star);
   //yloc += .01;
    rots += .001;

    repaint();  
}

我遇到的问题是绘画功能。使用getRotateInstance,它会沿着xloc和yloc的轴旋转。当这些数字递增时,星形旋转从其原点扩展到包含整个屏幕。我能想到的唯一解决方案是改变xPoints []和yPoints [],但到目前为止还没有成功。还有其他方法可以完成这项工作或解决我目前遇到的问题吗?

编辑:所以我取得了一些进展!我接受了建议并且我已经结束了。 我将代码AffineTransform trans = AffineTransform.getRotateInstance替换为:

AffineTransform trans = new AffineTransform(); trans.setToTranslation(xloc, yloc); trans.rotate(rots);

现在它旋转并在屏幕上移动但是虽然它不会在越来越大的场地周围旋转,但它仍然围绕着我无法看出的点旋转。我猜它与xloc和yloc点的位置有关。基于我之前的测试,xloc和yloc应该以其原点为中心,因此它应该正确旋转。有什么建议吗?

编辑2:我收到建议说我应该使用Graphics2D函数进行翻译和旋转。我用这个改变了AffineTransform语句:

g2d.translate(xloc, yloc); g2d.rotate(rots);

我现在遇到的问题是,当恒星进行平移和旋转时,它似乎也在进行额外的旋转。所以它现在所做的是在其原点旋转并围绕一个额外的点旋转,这是我无法在沿y轴平移的情况下得出的。为了更好地理解它的外观,想象一个行星在白天和黑夜中旋转,还绕着一颗恒星旋转,然后以一条直线移动。 我已更新上面的代码以反映我的更改。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

通过将double xloc = 150, yloc = 250;更改为int xloc = 150, yloc = 250;,它解决了问题。然而,一切都变得太快,所以我添加了一个计时器来减慢速度,就是这样。

我的猜测是,双打并不能很好地发挥作用。形状必须是int,所以通过使变量加倍并将其应用于变换,它就搞乱了。