2016-05-22 5 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-teaching-java-applets /)を使用します。 2)なぜAWTを使用するのですか? Swingに賛成するコンポーネントを使用してAWTを放棄する理由は、[この回答](http://stackoverflow.com/questions/6255106/java-gui-listeners-without-awt/6255978#6255978)を参照してください。 –

+0

先生からの仕事でした。 – Sergo

+0

*「教師の仕事だった」* OK。それらにそれらのリンクを与えてください。 –

答えて

1

あなたはGraphics2D.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この仕組みを説明するコメントを追加しました。私が書いたものであなたの "ペイント"メソッドを置き換えると、矩形が回転できることがわかります。 .rotate(theta、x、y) "thetaは度ではなくラジアンである。 – Arman

+0

私は入れ替えましたが、彼は動かない。別の変更を加えましたか? – Sergo

関連する問題