概要

時間割

テーマ

ワークシート: - - - - - 企画 - 評価

作品

補足

ヘルプ

数式がつくるかたち
プログラムのソースコード

プログラムのダウンロード
プログラムのソースコードは, ここ から取得できるので,予習をする方は利用してください. なお,受講生には,学籍番号などを記入したものを演習時間内に配布する予定です.

プログラム1のソースコード


//
// プログラム1のソースコード (学習用)
//
import jp.ac.teu.media.*;

public class ex_1 extends TMLib {
    final static int vsize = 256;

    public static void main(String [] args) {
        begin(new ex_1(), vsize, vsize);
    }

    public void Main() {
        int x, y, R, G, B;
        TMLibImage    img = new TMLibImage();
        img.newImage(vsize, vsize);

        for(x = 0; x < vsize; x++){
            for(y = 0; y < vsize; y++){

                // *** BEGIN YOUR PROGRAM *** //

                R = 255;
                G = 255;
                B = 255;

                // *** END YOUR PROGRAM *** //

                img.setRGB(x, y, R, G, B);
            }
        }
        drawImage(0, 0, img);
    }
}


プログラム2のソースコード


/* ============================================================ //

// 以下のタグの間に,学籍番号と氏名を記してください.
<ID>02p000</ID><NAME>  </NAME>

// 以下のタグの間に,タイトルを記してください.
<TITLE>  </TITLE>

// 以下のタグの間に,“企画”を200〜400字程度で記してください.
<DESCRIPTION>


</DESCRIPTION>

// ============================================================ */

//
// プログラム2のソースコード (提出用)
//
import jp.ac.teu.media.*;

public class u02p000_2 extends TMLib {
    final static int vsize = 480;

    public static void main(String [] args) {
        begin(new u02p000_2(), vsize, vsize);
    }

    public void Main() {
        int x, y, R, G, B;
        double X, sX, wX, dX, Y, sY, wY, dY, Z1, Z2, Z3;
        TMLibImage    img = new TMLibImage();
        img.newImage(vsize, vsize);

        // *** BEGIN WINDOW *** //

        sX = -100.0;
        sY = -100.0;
        wX = 200.0;
        wY = wX;

        // *** END WINDOW *** //

        dX = wX/(double)vsize;
        dY = wY/(double)vsize;

        for(x = 0; x < vsize; x++){
            X = sX + dX * (double)x;

            for(y = 0; y < vsize; y++){
                Y = sY + dY * (double)y;

                // *** BEGIN YOUR PROGRAM *** //

                Z1 = X*X + Y*Y;
                Z2 = 0;
                Z3 = 0;

                R = (int)Z1 % 256;
                G = (int)Z1 % 256;
                B = (int)Z1 % 256;

                // *** END YOUR PROGRAM *** //

                img.setRGB(x, y, R, G, B);
            }
        }

        drawImage(0, 0, img);
        img.writeImage("u02p000_2.bmp");
    }
}


ヒント 同心円模様・螺旋縞模様を作るには以下の二つのメソッドが必要となります.
(「public void Main()」の直前の行に追加)


    // 2点間の長さを求めるメソッド (追加)
    public double getLength(int x, int y, int ox, int oy){
        return Math.sqrt((double)((x - ox)*(x - ox) + (y - oy)*(y - oy)));
    }

    // 中心点(ox, oy)に対する角度(ラジアン)を求めるメソッド (追加)
    public double getRadian(int x, int y, int ox, int oy){
        double r = getLength(x, y, ox, oy);
        double s = Math.asin((double)(y - oy)/r);
        double c = Math.acos((double)(x - ox)/r);
        double p = Math.PI/2.0;
        if( 0 <= s && s <= p  &&  0 <= c && c <= p ) return s;
        else if( 0 <= s && s <= p  &&  p <= c && c <= 2.0*p ) return c;
        else if( -p <= s && s <= 0  &&  p <= c && c <= 2.0*p ) return 2.0*p - s;
        else if( -p <= s && s <= 0  &&  0 <= c && c <= p ) return 4.0*p - c;
        else return 0.0;
    }