7/10 課題
問題
class Mandel{
// 実数を引数(パラメタ)に持つメソッド mandel の定義
static int mandel(double x, double y){
double zr=0, zi=0,new_zr;
int i;
for(i=0;i<50;i=i+1){
if(zr*zr+zi*zi>4.0) { // |Zi|>2.0 の時は発散と判断
return i;
}
// 複素数の計算
// (zr+zi*i)*(zr+zi*i)+x+y*i=(zr*zr-zi*zi+x)+(2*zr*zi+y)*i
new_zr=zr*zr-zi*zi+x;
zi=2*zr*zi+y;
zr=new_zr;
}
return 50;
}
public static void main(String[] args){
int width=256, height=256;
System.out.println("P3 "+width+" "+height+" 255");
int i,j,r;
double x, y;
for(i=0;i<height;i=i+1){
for(j=0;j<width;j=j+1){
// -1.7 <= x < 0.7, -1.2 <= y < 1.2の範囲で計算
// 実数(double)から整数(int)への変換は「(double)整数式」
// のようにおこなう.
x= -1.7+2.4*((double)j/(double)width);
y= -1.2+2.4*((double)i/(double)height);
// 0 <= r <= 50の値が返る
r=mandel(x,y);
// r=50の時に黒(0,0,0), r=0の時にほぼ白(250,250,250)とする.
System.out.println((250-r*5)+" "+(250-r*5)+" "+(250-r*5));
}
}
}
}
- 上のプログラムを, ~/jousho00 以下に Mandel.java という名前で保存して,
コンパイル,実行してみなさい.
- 上のプログラムは,-1.7 <= x < 0.7, -1.2 <= y < 1.2の範囲でマンデ
ルブロー集合を計算しているが, より狭い範囲(元のプログラムよりも縦横そ
れぞれ 1/4 以下)を計算するように Mandel.java を書き換えなさい(範囲の選
び方を間違えると,境界部分が含まれないつまらない画像になってしまうので,
注意すること,元のプログラムの画像で左上の点が(-1.7,-1.2), 右下の点が(0.7, 1.2)なので,複雑そうな所を見当をつけてそこを拡大すると良い).
- 上のカラー画像は色使いにセンスがないので,Mandel.java
System.out.println(((50-r)*71)%256+" "+((50-r)*111)%256+" "+((50-r)*97)%256);
の部分を書き換えて(71, 111, 97あたりの数字),より綺麗な画像を作成するように書き変えなさい.
結果
- 1点1名 元のまま提出
- 2点22名 拡大率不足(縦横それぞれ4倍が目安),縦横比の変更の結果自
己相似性が崩れている(効果を上げている場合は減点せず),マンデルブロー集
合の境界が現れない面白くない範囲を指定.
- 3点149名
優秀作品
g040236
(-1.1,-0.5)-(-0.7,-0.2)
System.out.println(((50-r)*0)%256+" "+((50-r)*7)%256+" "+((50-r)*7)%256);
g040244
(-0.57,-0.64)-(-0.60,-0.61)
System.out.println(((100+r)*5)%256+" "+((200+r)*5)%256+" "+(200+r)%256);
g040252
(-1.1,0.19)-(-0.9,0.39)
System.out.println(((50-r)*11)%256+" "+((50-r)/2)+" "+((70-r)*2));
g040257
(0.454,0.385)-(0.455,0.386)
System.out.println((0+r*17%256)+" "+r*23%256+" "+(250-r*37%256));
g040277
(-1.0,-0.6)-(-0.4,0.0)
System.out.println("255"+" "+((50-r)*43289324)%256+" "+"0");
g040288
(-0.5,-1.5)-(-0.2,-1.2)
System.out.println(((50-r)*2)%256+" "+((50-r)*4)%256+" "+((50-r)*16)%256);
g040297
(-0.137,-0.942)-(-0.037,-0.842)
System.out.println((250+r*3)%256+" "+" 0 " +""+(r*5)%256);
g040299
(0.426,0.3295)-(0.451,0.3545)
System.out.println((255-r*51/10)+" "+(255-r*51/10)+" "+255);
g040311
(-1.45,-0.1)-(-1.05,0.3)
System.out.println(((5-r)*23)%256+" "+((128-r)*23)%256+" "+((39-r)*23)%256);
g040704
(0.29,0.01)-(0.30,0.02)
System.out.println(((239*r)%256)+" "+((r*r*37)%256)+" "+((123*r*r*r)%256));
g040705
(-0.715,-0.5)-(-0.565,-0.35)
System.out.println(((50-r)*0)%256+" "+((50-r)*0)%256+" "+((50-r)*500)%256);
g040712
(-1.2,-0.5)-(-0.7,0.0)
System.out.println(((50-r)*255)%256+" "+((50-r)*25)%256+" "+((50-r)*25)%256);
g040734
(-0.02,-0.85)-(0.02,-0.81)
System.out.println(((50-r)*10)%256+" "+((50-r)*20)%256+" "+((50-r)*5)%256);
g040738
(-0.28,-1.05)-(0.22,-0.55)
System.out.println(((50-r)*3)%256+" "+((50-r)*11)%256+" "+((50-r)*7)%256);
g040740
(-1.0,-0.7)-(-0.5,-0.2)
System.out.println(((50-r)*1)%256+" "+((50-r)*22)%256+" "+((55-r)*241)%256);
g040741
(-1.26,-0.35)-(-1.245,-0.335)
System.out.println((255-r)+" "+(255-r)+" 245");
g040742
(-1.0,0.2)-(-0.5,0.7)
System.out.println(((50-r)*22)%256+" "+((50-r)*0)%256+" "+((50-r)*240)%256);
g040753
(-0.3,-1.1)-(-0.05,-0.85)
System.out.println(((50-r)*r+(i+j))%256+" "+((50-r)*111*((j+i)/r))%256+" "+((50-r)*57)%256);
g040756
(-1.4,0.5)-(-0.8,0.1)
System.out.println(((50-r)*20)%256+" "+((50-r)*7)%256+" "+((50-r)*10)%256);
g040760
(-0.63,-0.7)-(-0.49,-0.53)
System.out.println(((50-r)*256)%256+" "+((50-r)*0)%256+" "+((50-r)*244)%256);
g040761
(-0.15,0.85)-(-0.08,0.92)
System.out.println(((50-r)*0)%256+" "+((50-r)*250)%256+" "+((50-r)*250)%256);
g040765
(0,0,0,0)-(0.7,0.7)
System.out.println((50-r)*5+" "+(50-r)*5+" "+(220-r));
g040774
(-1.32,-0.45)-(-1.02,-0.15)
System.out.println(((50-r)*6-120)%256+" "+((70-r)*13-80)%256+" "+(67-r*9-30)%256);
g040788
(-0.75,-0.65)-(-0.45,-0.35)
System.out.println((r*2)%256+" "+(r*102)%256+" "+(r*194)%256);