数式がつくるかたち: ソースコード


概要

時間割

テーマ

ワークシート: 1 - 2 - 3 - 4 - 5 - 企画 - 評価
作品

補足
ヘルプ

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

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

プログラム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;
 }

AltStyle によって変換されたページ (->オリジナル) /