【发布时间】:2013-02-02 09:11:15
【问题描述】:
我正在尝试使用 java awt 绘制一个矩形,并通过鼠标拖动使其随鼠标光标旋转。
当我测试它时,矩形旋转得快得离谱。
我的矩形():
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。
-
我不是 100%,但可能是您在需要弧度时向
AffineTransform提供度数... -
如果角度直接来自 Math.atan2,它的单位是弧度。
标签: java swing awt java-2d affinetransform