座標の回転で星を描く

座標を回転する Class を定義して、5本の線で星を描きます。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして DrawStar.java の名前で保存して下さい。
    //★ Swing 座標の回転で星形を描く    前田 稔
    import java.awt.*;
    import javax.swing.*;
    
    class DrawStar extends JFrame
    {   public Color  color1;
    
        // Constructor
        public DrawStar()
        {   super("Swing DrawStar");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            color1 = new Color(255, 0, 0);
            setSize(300, 300);
            setVisible(true);
        }
    
        // Main
        public static void main(String args[])
        {   new DrawStar();
        }
    
        // Paint Method
        public void paint(Graphics g)
        {   int i,ox,oy;
    
            super.paint(g);
            g.setColor(color1);
            Rotation rotation = new Rotation(150,170);
            ox= 150;
            oy= 50;
            for(i=0; i<5; i++)
            {   rotation.Rot(144,ox,oy);
                g.drawLine(ox,oy,rotation.x,rotation.y);
                ox= rotation.x;
                oy= rotation.y;
            }
        }
    }
    
    // 二次元座標回転 Class
    class Rotation
    {   int cx,cy;          //回転軸の中心
        int x,y;            //回転後の座標
    
        // Constructor
        Rotation(int a, int b)
        {   cx = a;
            cy = b;
        }
    
        // 座標回転メソッド
        void Rot(double w, int xx, int yy)
        {   double px,py;
            px = xx-cx;
            py = yy-cy;
            x= (int)(px*Math.cos(w/180*3.14))-(int)(py*Math.sin(w/180*3.14))+cx;
            y= (int)(px*Math.sin(w/180*3.14))+(int)(py*Math.cos(w/180*3.14))+cy;
        }
    }
    
  2. java のソースファイルをコンパイルして class オブジェクトを実行して下さい。
    コンパイルの詳細は Java2 を動かす または Jcpad の設定を参照して下さい。
    ページ先頭の画面が表示されたら完成です。
    プログラムの終了は Window 画面タイトルバーの「×」をクリックします。
    DOS 画面にプログラム終了のメッセージが表示されるので、何かキーをタイプします。

プログラムの説明

  1. Swing(スィング)を使ったプログラムの基本的な説明は Swing を使って、色を設定して線を描く を参照して下さい。
  2. paintComponent() は描画処理で呼び出されるメソッドです。
    super.paint(g) で Super Class の paint を呼び出して、画面を初期化します。
    g.setColor(color1) で描画色を設定します。
    new Rotation(150,130) で星マークの中心座標を指定して Rotation をインスタンス化します。
    ox,oy は drawLine() で星マークを描く開始座標です。
    rotation.Rot(144,ox,oy) で ox,oy を144度回転した座標を x, y に求めます。
    g.drawLine() で ox,oy から x, y に線を描画します。
    ox,oy に rotation.x, rotation.y の座標を設定して繰り返します。
        // Paint Method
        public void paint(Graphics g)
        {   int i,ox,oy;
    
            super.paint(g);
            g.setColor(color1);
            Rotation rotation = new Rotation(150,170);
            ox= 150;
            oy= 50;
            for(i=0; i<5; i++)
            {   rotation.Rot(144,ox,oy);
                g.drawLine(ox,oy,rotation.x,rotation.y);
                ox= rotation.x;
                oy= rotation.y;
            }
        }
        
  3. 二次元座標を回転する Class です。
    Constructor では回転軸の中心座標を cx,cy に設定します。
    Rot() が座標を回転するメソッドです。
    回転角度(w)と座標(xx,yy)をパラメータで受け取ります。
    回転した座標を x, y に設定します。
    class Rotation
    {   int cx,cy;          //回転軸の中心
        int x,y;            //回転後の座標
    
        // Constructor
        Rotation(int a, int b)
        {   cx = a;
            cy = b;
        }
    
        // 座標回転メソッド
        void Rot(double w, int xx, int yy)
        {   double px,py;
            px = xx-cx;
            py = yy-cy;
            x= (int)(px*Math.cos(w/180*3.14))-(int)(py*Math.sin(w/180*3.14))+cx;
            y= (int)(px*Math.sin(w/180*3.14))+(int)(py*Math.cos(w/180*3.14))+cy;
        }
    }
    
  4. 回転座標の説明は Windows Guid を参照して下さい。

超初心者のプログラム入門(Java2)