2014-01-05 3 views
0

Я сделал прямоугольник (объект Polygon), нарисованный на классе расширения JPanel.Вращение прямоугольника в Java с использованием матрицы поворота

Затем я попытался создать еще один объект Polygon, который должен быть 90-градусным вращением оригинального многоугольника.

Я использовал матрицу вращения.

По какой-то причине это не работает. Запуск программы отображает только исходный прямоугольник.

Что случилось? Спасибо

public class DrawingPanel extends JPanel{ 

    public void paintComponent(Graphics g){ 

     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 

     Point p1,p2,p3,p4; 
     p1 = new Point(50,50); 
     p2 = new Point(200,50); 
     p3 = new Point(200,100); 
     p4 = new Point(50,100); 

     int[] x = {(int) p1.getX(), (int) p2.getX(), (int)p3.getX(), (int) p4.getX()}; 
     int[] y = {(int) p1.getY(), (int) p2.getY(), (int)p3.getY(), (int) p4.getY()}; 

     Polygon poly = new Polygon(x, y, x.length); 
     g2d.draw(poly); 

     p1.setLocation(p1.getX() * Math.cos(Math.toRadians(90)) - p1.getY() * Math.sin(Math.toRadians(90)), 
       p1.getX() * Math.sin(Math.toRadians(90)) + p1.getY() * Math.cos(Math.toRadians(90))); 
     p2.setLocation(p2.getX() * Math.cos(Math.toRadians(90)) - p2.getY() * Math.sin(Math.toRadians(90)), 
       p2.getX() * Math.sin(Math.toRadians(90)) + p2.getY() * Math.cos(Math.toRadians(90))); 
     p3.setLocation(p3.getX() * Math.cos(Math.toRadians(90)) - p3.getY() * Math.sin(Math.toRadians(90)), 
       p3.getX() * Math.sin(Math.toRadians(90)) + p3.getY() * Math.cos(Math.toRadians(90))); 
     p4.setLocation(p4.getX() * Math.cos(Math.toRadians(90)) - p4.getY() * Math.sin(Math.toRadians(90)), 
       p4.getX() * Math.sin(Math.toRadians(90)) + p4.getY() * Math.cos(Math.toRadians(90))); 

     int[] x2 = {(int) p1.getX(), (int) p2.getX(), (int)p3.getX(), (int) p4.getX()}; 
     int[] y2 = {(int) p1.getY(), (int) p2.getY(), (int)p3.getY(), (int) p4.getY()}; 

     Polygon poly2 = new Polygon(x2, y2, x2.length); 
     g2d.draw(poly2); 

    } 

} 
+0

Для лучшей помощи раньше, опубликовать [SSCCE] (Http: // sscce. орг /). –

ответ

1

Я считаю, что вы вращаете его с экрана, поэтому я не буду рисовать в результате.

Ваш код будет поворачивать его на 90 вокруг верхнего левого угла, в результате чего в том, чтобы в левую части экрана

enter image description here

+0

Вы правы, я перевел объект Graphics в другое место, а ti работал. Но почему он сделал второй экран? – user3150201

+0

Хорошо, просто прочитайте свое редактирование. Можно ли установить точку поворота в центр прямоугольника? – user3150201

+0

@ user3150201 Да, вы переводите прямоугольник в начало координат, поворачиваете, а затем переводите назад. также проверьте ['Affine Transform'] (http://docs.oracle.com/javase/7/docs/api/java/awt/geom/AffineTransform.html) – vandale

Смежные вопросы