Я пытаюсь нарисовать прямоугольник с java awt и заставить его вращаться с помощью мыши, перетаскивая мышью.AffineTransform() слишком быстро поворачивает прямоугольник слишком быстро
Когда я тестировал его, прямоугольник вращается смехотворно быстро.
Мой Rectangle():
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);
}
});
Так, мол, сценарий выглядит следующим образом:
Но когда я слегка перетащить (тета менее чем 10 градусов) прямоугольник с правой стороны, прямоугольник поворачивается даже к нижней части опорной точки.
Другое примечание: прямоугольник вращается, но координаты четырех углов прямоугольника все же изменились.
Я совсем потерялся при выполнении этих задач преобразования с Java ..
Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –
Я не 100%, но может быть, что вы поставляете градусы в «AffineTransform», когда ему нужны радианы ... – MadProgrammer
Если угол идет непосредственно из Math.atan2, он находится в радианах. –