数式がつくるかたち プログラムのソースコード |
プログラムのダウンロード プログラム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"); } } ヒント
同心円模様・螺旋縞模様を作るには以下の二つのメソッドが必要となります. // 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; } |