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));
      }
    }
  }
}
  1. 上のプログラムを, ~/jousho00 以下に Mandel.java という名前で保存して, コンパイル,実行してみなさい.
  2. 上のプログラムは,-1.7 <= x < 0.7, -1.2 <= y < 1.2の範囲でマンデ ルブロー集合を計算しているが, より狭い範囲(元のプログラムよりも縦横そ れぞれ 1/4 以下)を計算するように Mandel.java を書き換えなさい(範囲の選 び方を間違えると,境界部分が含まれないつまらない画像になってしまうので, 注意すること,元のプログラムの画像で左上の点が(-1.7,-1.2), 右下の点が(0.7, 1.2)なので,複雑そうな所を見当をつけてそこを拡大すると良い).
  3. 上のカラー画像は色使いにセンスがないので,Mandel.java
            System.out.println(((50-r)*71)%256+" "+((50-r)*111)%256+" "+((50-r)*97)%256);
    
    の部分を書き換えて(71, 111, 97あたりの数字),より綺麗な画像を作成するように書き変えなさい.

結果


優秀作品

g040236
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
g040244 (-0.57,-0.64)-(-0.60,-0.61)
     System.out.println(((100+r)*5)%256+" "+((200+r)*5)%256+" "+(200+r)%256);

g040252
g040252 (-1.1,0.19)-(-0.9,0.39)
        System.out.println(((50-r)*11)%256+" "+((50-r)/2)+" "+((70-r)*2));

g040257
g040257 (0.454,0.385)-(0.455,0.386)
        System.out.println((0+r*17%256)+" "+r*23%256+" "+(250-r*37%256));

g040277
g040277 (-1.0,-0.6)-(-0.4,0.0)
          System.out.println("255"+" "+((50-r)*43289324)%256+" "+"0");

g040288
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
g040297 (-0.137,-0.942)-(-0.037,-0.842)
        System.out.println((250+r*3)%256+" "+" 0 " +""+(r*5)%256);

g040299
g040299 (0.426,0.3295)-(0.451,0.3545)
        System.out.println((255-r*51/10)+" "+(255-r*51/10)+" "+255);

g040311
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
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
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
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
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
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
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
g040741 (-1.26,-0.35)-(-1.245,-0.335)
        System.out.println((255-r)+" "+(255-r)+" 245");

g040742
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
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
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
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
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
g040765 (0,0,0,0)-(0.7,0.7)
        System.out.println((50-r)*5+" "+(50-r)*5+" "+(220-r));

g040774
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
g040788 (-0.75,-0.65)-(-0.45,-0.35)
        System.out.println((r*2)%256+" "+(r*102)%256+" "+(r*194)%256);