Star Class で正多角形と星を描画する

Star Class を使うと正多角形や星を回転して、簡単に描画することができます。

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

プログラムの作成

  1. 正多角形や星のマークを描画する Star Object Class です。
    色の設定や座標の回転機能もサポートしています。
    メモ帳などでタイプして Star.java の名前で保存して下さい。
    //★ 正多角形と星の回転座標を求める Object Class    前田 稔
    import java.awt.*;
    import javax.swing.*;
    
    public class Star
    {
        public  Color   cor;
        public  int     rot;
        Graphics    gr;
        int         cnt;
        int         cx0,cy0;
        double      w1,w2,rad;
    
        // Constructor
        Star()
        {   cnt= 10;
            cx0=cy0=rot= 0;
            w1= 1.0;
            w2= 0.0;
            cor = new Color(0,0,0);
        }
    
        // 星を描画する
        public void ViewStar(Graphics g,int cx,int cy,int len)
        {   int xw[] = new int[10];
            int yw[] = new int[10];
            int i;
            gr= g;
            cnt= 10;
            rad= 36.0;
            cx0= cx;
            cy0= cy;
            w1= (double)len;
            w2= w1/2.7;
            SetT(xw,yw);
            if (rot!=0)
                for(i=0; i<cnt; i++)
                    Rotate(i,xw,yw);
            View(xw,yw);
        }
    
        // 正多角形を描画する
        public void NKaku(Graphics g,int n,int cx,int cy,int len)
        {   int xw[] = new int[n];
            int yw[] = new int[n];
            int i;
            gr= g;
            cnt= n;
            rad= 360/n;
            cx0= cx;
            cy0= cy;
            w1= (double)len;
            w2= 0.0;
            SetT(xw,yw);
            if (rot!=0)
                for(i=0; i<cnt; i++)
                    Rotate(i,xw,yw);
            View(xw,yw);
        }
    
        // 多角形の座標計算
        void SetT(int x[],int y[])
        {   int i;
            for(i=0; i<cnt; i++)
            {   if (i%2==0 || w2==0.0)
                {   x[i]= cx0+(int)(Math.sin((rad*i)/180*3.14)*w1);
                    y[i]= cy0-(int)(Math.cos((rad*i)/180*3.14)*w1);
                }
                else
                {   x[i]= cx0+(int)(Math.sin((rad*i)/180*3.14)*w2);
                    y[i]= cy0-(int)(Math.cos((rad*i)/180*3.14)*w2);
                }
            }
        }
    
        // 多角形の描画
        void View(int x[],int y[])
        {   gr.setColor(cor);
            gr.fillPolygon(x,y,cnt);
        }
    
        // 回転計算
        void Rotate(int n,int x[],int y[])
        {   double  px,py,w;
            px= x[n]-cx0;
            py= y[n]-cy0;
            w= rot/180.0*3.14;
            x[n]= (int)(px*Math.cos(w))-(int)(py*Math.sin(w))+cx0;
            y[n]= (int)(px*Math.sin(w))+(int)(py*Math.cos(w))+cy0;
        }
    }
    
  2. 最初に Star.java をコンパイルして Star.class を作成して下さい。
    main() メソッドが定義されていないので、次のメッセージが表示されますが無視して下さい。
        Exception in thread "main" java.lang.NoSuchMethodError: main
         -- Press any key to exit (Input "c" to continue) --
        
  3. Star.class を使って、正多角形と星を回転して描画する StarMain です。
    Star.class と同じフォルダーに格納して下さい。
    StarMain.java の名前で保存して、コンパイル&実行して下さい。
    //★ 正多角形と星を描く(Star Object Class を使う)   前田 稔
    import java.awt.*;
    import javax.swing.*;
    
    class StarMain extends JFrame
    {
        public static void main(String args[])
        {   StarMain japp = new StarMain();
            japp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            japp.setTitle("矩形と星を描く");
            japp.setSize(500,240);
            japp.setVisible(true);
        }
    
        public void paint(Graphics g)
        {   Star    star= new Star();
            super.paint(g);
            star.cor= Color.red;
            star.rot= 10;
            star.NKaku(g,5,150,130,80);
            star.cor= new Color(255,255,0);
            star.rot= 330;
            star.ViewStar(g,350,130,80);
        }
    }
    
  4. ページ先頭の画面が表示されたら完成です。
    確認が終われば「×」をクリックして終了して下さい。

プログラムの説明

Star Class を使うと正多角形や星を簡単に描画することができます。
また色の設定や図形の回転機能も備わっています。
  1. このプログラムは JFrame を継承して、コンストラクタを使わずに作成してみました。
    Swing のプログラムは java.awt.* と javax.swing.* をインポートします。
    main() では StarMain クラスをインスタンス化して、ウインドウ情報を設定します。
        import java.awt.*;
        import javax.swing.*;
        class StarMain extends JFrame
        {   public static void main(String args[])
            {   StarMain japp = new StarMain();
                japp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                japp.setTitle("矩形と星を描く");
                japp.setSize(500,240);
                japp.setVisible(true);
            }
        
  2. ウインドウを描画する paint() の説明です。
    new Star() で Star Object をインスタンス化します。
    色を設定するときは star.cor に Color を設定して下さい。
    star.cor には規定値として黒が設定されています。
    図形を回転するときは star.rot に回転角度(0〜359)を設定して下さい。
    star.rot には規定値としてゼロが設定されています。
    star.NKaku(g,5,150,130,80) で正5角形を描画します。
    star.ViewStar(g,350,130,80) で星型を描画します。
        public void paint(Graphics g)
        {   Star    star= new Star();
            super.paint(g);
            star.cor= Color.red;
            star.rot= 10;
            star.NKaku(g,5,150,130,80);
            star.cor= new Color(255,255,0);
            star.rot= 330;
            star.ViewStar(g,350,130,80);
        }
        
  3. star.NKaku(g,5,150,130,80) のパラメータの説明です。
    引数の値引数の説明
    g 描画に必要な Graphics
    5 正n角形を描画(今回は正5角形)
    150,130 図形の中心座標
    80 図形の半径
  4. star.ViewStar(g,350,130,80) のパラメータの説明です。
    引数の値引数の説明
    g 描画に必要な Graphics
    350,130 図形の中心座標
    80 図形の半径
  5. 回転座標の説明は Windows Guid を参照して下さい。

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