【发布时间】: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