un esempio di uso della grafica su Android per generare l'insieme di Mandelbrot
Per la cronaca sul mio telefono vengono impiegati circa 12,5 secondi per generare l'immagine con i parametri impostati nel programma sottostante (255 iterazioni per ciclo full screen)
----------------------------------------------------------------------------------------
package com.mandelbrot;
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.graphics.Point;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.widget.ImageView;
public class MandelbrotIntActivity extends Activity {
/** Called when the activity is first created. */
private static final double re_min = -2.5;
private static final double re_max = 1.0;
private static final double im_min = -1.0;
private static final double im_max = 1.0;
private static int iterazioni = 255;
private double y;
private double x;
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);
// recupera le informazioni sulle dimensioni dello schermo
for (int i=0;i<width;i++)
{
for (int j=0;j<height;j++)
{
double b = im_min + i * im_factor / width;
double a = re_min + j * re_factor / height;
x = 0.0;
y = 0.0;
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);
}
}
}
}
}
----------------------------------------------------------------------------------------
Sempre giusto per la cronaca nel 1988 facevo piu' o meno la stessa cosa con la stessa risoluzione grafica ma con un Commodore 64 (lascio perdere i tempi di calcolo che erano della grandezza delle ore e non certo dei secondi)
Iscriviti a:
Commenti sul post (Atom)
Alpine Linux 2024 su IBM A31
Ho provato a far resuscitare un IBM A31 destinato alla discarica. La macchina ha processore P4, 256 Mb di RAM, la batteria CMOS morta ed e...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
Nessun commento:
Posta un commento