我正在尝试在JPanel中绘制一个矩形,使其能够移动并旋转以模拟汽车的运动。我已经能够让矩形移动和旋转,但是它围绕(0,0)的原点旋转。我非常高兴能够让矩形移动和旋转,因为我对Java GUI非常陌生,但是我似乎无法让矩形围绕自身旋转,因为当我对其进行了更多实验时,初始化矩形并将其旋转45度后,它的位置发生了变化,这应该是从旋转方法附加的变换矩阵。
我查看了网站上关于如何解决这个问题的信息,但只找到如何旋转矩形而不是如何像模拟汽车的运动一样旋转和移动。我认为关键在于它的变换矩阵,但我只是在猜测。所以我的问题是,我如何使矩形能够围绕自身旋转和移动,而不是针对JPanel中的一个点旋转。
以下是我迄今为止想出的代码:
我查看了网站上关于如何解决这个问题的信息,但只找到如何旋转矩形而不是如何像模拟汽车的运动一样旋转和移动。我认为关键在于它的变换矩阵,但我只是在猜测。所以我的问题是,我如何使矩形能够围绕自身旋转和移动,而不是针对JPanel中的一个点旋转。
以下是我迄今为止想出的代码:
public class Draw extends JPanel implements ActionListener {
private int x = 100;
private int y = 100;
private double theta = Math.PI;
Rectangle rec = new Rectangle(x,y,25,25);
Timer timer = new Timer(25,this);
Draw(){
setBackground(Color.black);
timer.start();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.white);
rec.x = 100;
rec.y = 100;
g2d.rotate(theta);
g2d.draw(rec);
g2d.fill(rec);
}
public void actionPerformed(ActionEvent e) {
x = (int) (x + (Math.cos(theta))*1);
y = (int) (y + (Math.sin(theta))*1);
theta = theta - (5*Math.PI/180);
repaint();
}