2016-05-22 3 views
0

Я хочу повернуть прямоугольник вокруг одного из углов, но теперь я не знаю, как определить новые координаты углов. Вращение может быть вокруг любого угла. Может быть, существует другой способ вращения?Как поворачивать прямоугольник вокруг угла на апплет?

Может кто-нибудь мне помочь?

screenshot of my applet

import java.applet.*; 
import java.awt.*; 

public class MainApplet extends Applet implements Runnable { 

int width, height; 
int i = 0; 
Thread t = null; 
boolean threadSuspended; 

public void init() { 
    width = getSize().width; 
    height = getSize().height; 
    setBackground(Color.black); 
} 

public void destroy() {} 


public void start() { 
    if (t == null) { 
     t = new Thread(this); 
     threadSuspended = false; 
     t.start(); 
    } else { 
     if (threadSuspended) { 
      threadSuspended = false; 
      synchronized (this) { 
       notify(); 
      } 
     } 
    } 
} 

public void stop() { 
    threadSuspended = true; 
} 

public void run() { 
    try { 
     while (true) { 
      ++i; 
      if (i == 359) { 
       i = 0; 
      } 
      showStatus("i is " + i); 

      if (threadSuspended) { 
       synchronized (this) { 
        while (threadSuspended) { 
         wait(); 
        } 
       } 
      } 
      repaint(); 
      t.sleep(100); // interval given in milliseconds 
     } 
    } catch (InterruptedException e) { 
    } 
} 

public void paint(Graphics g) { 
    g.setColor(Color.green); 

    g.drawRect(200,150, (int) (50*Math.cos(i)-100*Math.sin(i)+200-200*Math.cos(i)+150*Math.sin(i)), 
         (int) (50*Math.sin(i)+100*Math.cos(i)+150-200*Math.sin(i)-150*Math.cos(i))); 
} 
} 
+0

1) Зачем нужен апплет? Если это связано с тем, что учитель указал на это, обратитесь к [Почему учителя CS должны ** останавливаться ** преподавать Java-апплеты] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop-учебно-ява-апплеты /). 2) Зачем использовать AWT? См. [Этот ответ] (http://stackoverflow.com/questions/6255106/java-gui-listeners-without-awt/6255978#6255978) по многим причинам, чтобы отказаться от использования AWT с использованием компонентов в пользу Swing. –

+0

Это была задача учителя. – Sergo

+0

* «Это была задача учителя». * ОК. Дайте им эту ссылку .. –

ответ

1

Вы можете использовать Graphics2D «s .rotate(theta, double x, double y) метод.

public void paint(Graphics g){ 
    //Create Graphics2D object: 
    Graphics2D g2d = (Graphics2D) g.create(); 

    //Create rectangle of origin (0,0), w=30, h=50 
    Rectangle rectangle = new Rectangle(); 
    rectangle.setBounds(0,0,30,50); 

    //Rotate rectangle by 1 radian(Math.PI) from the bottom corner 
    g2d.rotate(Math.PI, rectangle.x + rectangle.width/2, rectangle.y + rectangle.height/2); 

    //Draw rectangle 
    g2d.draw(rectangle); 
} 
+0

Можете ли вы показать мне, как использовать этот метод? – Sergo

+0

@Sergo Я добавил комментарии, чтобы объяснить, как это работает. Если вы замените свой метод «paint» на тот, который я написал, вы увидите, что прямоугольник может вращаться. Имейте в виду «.rotate (theta, x, y)» theta находится в радианах, а не в градусах. – Arman

+0

Я заменил, но он не двигается. Вы сделали другие изменения? – Sergo

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