我想繪製一個矩形與java awt並使鼠標拖動鼠標光標旋轉。AffineTransform()旋轉矩形的方式太快
當我測試它時,矩形旋轉得很快。
我的矩形():
private Rectangle2D rec = new Rectangle2D.Float(x0,y0,w,h);
AffineTransform recTrans = new AffineTransform();
int pivotX = x0+w/2, pivotY = y0+h;
// (0,0) is at the top-left corner
我的paintComponent():
public void paintComponent(Graphics g) {
Graphics2D graph = (Graphics2D) g;
graph.translate(x,y);
graph.transform(recTrans);
graph.fill(rec);
graph.setColor(Color.blue);
graph.draw(rec);
}
我的鼠標拖動事件:
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
previousX = e.getX();
previousY = e.getY();
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
currentX = e.getX();
currentY = e.getY();
double angle1 = Math.atan2(currentY-pivotY, currentX-pivotX);
double angle2 = Math.atan2(previousY-pivotY, previousX-pivotX);
double theta = angle2 - angle1;
recTrans.rotate(theta, pivotX, pivotY);
}
});
所以假想情景是這樣的:
但是,當我稍微拖動(theta小於10度)的矩形到右側,矩形甚至旋轉到樞軸點的底部。
另一個說明,矩形旋轉但矩形的四個角的座標尚未改變。
做了Java的改造任務時,我完全迷失了方向..
爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-02-18 00:39:45
我不是100%,但它可能是當您需要弧度時爲「AffineTransform」提供度數... – MadProgrammer 2013-02-18 00:40:46
如果角度直接來自Math.atan2,則以弧度表示。 – 2013-02-18 00:44:28