2

マンデルブロー集合の色付けに問題があります。これは私の onDraw() 手順です:

@Override
protected void onDraw(Canvas canvas) {
   g = Math.round(60+(iter_count*(2500/16)));
   iter_count++;
   for(int xx = 1; xx <= xMax; xx++) {
       for(int yy = 1; yy <= yMax; yy++) {
           schirmzupap(ar,br,bi,ai,xx,yy,xMax,yMax);
           n = 1;
           zr0 = zr;
           zi0 = zi;
           while ((n<g) && (zr*zr+zi*zi<4)) {
               zrh = zr;
               zr = (zr*zr)-zi*zi+zr0;
               zi = zrh*zi+zi*zrh+zi0;
               n++;
           }
           if (n==g) {                                                //[Coloring]
               paint.setARGB(255,0,0,0);  
           }
           if ((n/g) < (1/2)) {
               paint.setARGB(255,Math.round((n/g)*255),0,0);
           }
           if (((n/g) < 1) && ((n/g) > 1/2)) {
               paint.setARGB(255,255,Math.round((n/g)*255),Math.round((n/g)*255));  
           }
           canvas.drawPoint(xx, yy, paint);                           //[/Coloring]
       }              
    }
}

これは、Java Android エミュレーターでどのように見えるかです: http://i55.tinypic.com/14ctqi8.png

これは私が望む方法です: http://i54.tinypic.com/nh1aqe.png Delphi で書かれていますが、着色部分は実際には同じです:

if n=g then image1.canvas.Pixels[xx,yy]:=RGB2TColor(0,0,0);
if (n/g)<(1/2) then image1.canvas.Pixels[xx,yy]:=RGB2TColor(Round((n/g)*255),0,0);
if ((n/g)<(1)) AND ((n/g)>(1/2)) then image1.canvas.Pixels[xx,yy]:=RGB2TColor(255,Round((n/g)*255),Round((n/g)*255));

誰か助けてくれませんか?グリーツ、

ヘンリー

4

2 に答える 2

2
  1. onDraw複雑な計算は、できればしないでください。
  2. 一般に、Math.floor()これらのインスタンスでは round の代わりに使用します。これは、ここで四捨五入する必要がないためです。
  3. else ifカラーリング アルゴリズムの 2 番目と 3 番目の条件を使用すると、より明確になります。3人目が2人目に勝ってるような…?
  4. (これが本当の問題です:-) nandgを整数として宣言したに違いありません! これを行わない限り、除算は整数除算になります。

ダブルに変換

(n/(double)g)

25000 / 25600willなどの整数除算を覚えておいてください。== 0したがって、これらすべてのピクセルは (255,0,0) になります。

于 2011-08-09T23:09:31.727 に答える
1

サンジェイが言ったように、あなたは分割に問題があります。

if ((n/g) < (1/2)) {...

if (((n/g) < 1) && ((n/g) > 1/2)) {....

Sanjay-wayで修正できます。ただし、1/2=0 1.0/2=0.5 に注意してください。または読みにくいが少し速い

if((2*n)<g){...

if((n<g)&&(2*n>g)){...
于 2011-08-10T01:34:08.320 に答える