【问题标题】:How can I rotate an Area object on its axis while also moving it along the y axis?如何在其轴上旋转区域对象同时沿 y 轴移动它?
【发布时间】:2015-06-19 01:31:43
【问题描述】:

所以我创建了一个 Area 对象并制作成一个 4 星多边形。我想要做的是旋转这个对象,同时让它沿 y 轴平移。 这是我用于创建对象的点的代码,星的中心是 xloc 和 yloc,其下方具有绘制函数:

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 轴平移。为了更好地理解它的样子,想象一个行星昼夜旋转,也绕着一颗恒星旋转,然后沿着一条直线移动。 我已经更新了上面的代码以反映我的更改。我该如何解决这个问题?

【问题讨论】:

标签: java rotation graphics2d area affinetransform


【解决方案1】:

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

我的猜测是 ints 在双打方面表现不佳。形状必须在 int 中,因此通过将变量加倍并将其应用于转换,它会搞砸。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多