giovedì 12 aprile 2012

Semplice Insieme Julia

non poteva mancare il fedele compagno dell'insieme di Mandelbrot ovvero l'insieme di Julia
In pratica esiste una corrispondenza tra le coordinate nel piano complesso dell'insieme di Mandelbrot ed il corrispettivo insieme di Julia

L'esempio sopra riportato e' corrispondente al punto-0.125;0.75 dell'insieme di Mandelbrot

Il codice e' estremamente simile a quello del precedente post

package com.julia;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.Display;
import android.widget.ImageView;


public class JuliaIntActivity extends Activity {
    /** Called when the activity is first created. */
    private static final double re_min = -2;
    private static final double re_max = 2.0;
    private static final double im_min = -2.0;
    private static final double im_max = 2.0;
    private static int iterazioni = 100;
    private double ynew;
    private double xnew;
    private double a;
    private double b;
    private int test;
    private double re_factor;
    private double im_factor;
   

   
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView view = (ImageView) findViewById(R.id.imageView1);

        Display display = getWindowManager().getDefaultDisplay();
        int width = display.getWidth(); //240
        int height = display.getHeight();
        
        Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
        
        Paint paint = new Paint();
        paint.setColor(Color.WHITE);
        Canvas canvas = new Canvas(bitmap);
        
        canvas.drawColor(Color.BLACK);
       
        view.setImageBitmap(bitmap);
       
        re_factor = (re_max - re_min);
        im_factor = (im_max - im_min);

        a = -0.125;
        b = 0.75;
  
        // recupera le informazioni sulle dimensioni dello schermo

        for (int i=0;i<width;i++)
        {
            for (int j=0;j<height;j++)
            {
                double x = im_min + i * im_factor / width;
                double y = re_min + j * re_factor / height;
                test = 0;
                for (int k=0;k<iterazioni;k++)
                {
                      xnew = x * x - y * y + a;
                      ynew = 2 * x * y + b;
                      if (((xnew*xnew)+(ynew*ynew))>4)
                      {
                          test = k;
                          k = iterazioni;
                         
                      }
                      x = xnew;
                      y = ynew;
                }
           
                if (test%2 == 1)
                {
                    //punto bianco
                    canvas.drawPoint(i, j, paint);

                }
            }
           
        }
    }
}