我想将这个小矩形移动到圆周上,这样我就像一个佳能一样看起来和移动。
代码
private void doDrawing(Graphics g){
g.setColor(Color.BLUE);
g.fillArc(-CANON_RADIUS/2, this.getHeight()-CANON_RADIUS/2, CANON_RADIUS, CANON_RADIUS, 0, 90);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLUE);
Rectangle rect = new Rectangle(CANON_RADIUS/2, this.getHeight()-CANON_RADIUS/2, CANON_WIDTH, CANON_HEIGHT);
AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(-60), rect.getX() + rect.width/2, rect.getY() + rect.height/2);
Shape transformed = transform.createTransformedShape(rect);
g2d.fill(transformed);
}
此代码围绕其中心旋转矩形。如何围绕圆周旋转矩形?
答案 0 :(得分:1)
首先,您可以使用转换矩阵,就像您已经使用的那样: http://en.wikipedia.org/wiki/Transformation_matrix
编辑: 看着你的代码,你想围绕一个锚旋转你的经典。请查看javadoc: http://docs.oracle.com/javase/7/docs/api/java/awt/geom/AffineTransform.html
public void rotate(double theta, 双重锚点, 双锚)
第一个参数是你的旋转,最后两个参数必须是你的大炮基地的中间!比如screen.height和0为你的例子:
AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(-60), 0, Screen.height);
Shape transformed = transform.createTransformedShape(rect);
g2d.fill(transformed);
第二种方法可以是围绕基部半径移动旋转矩形的中间位置。
喜欢(伪代码):
Point p = circle.getPoint();
shape.moveto(p.x-(shape.width/2),p.y-(shape.height/2));
g2d.fill(shape);