XHotSniperX
Lt. Junior Grade
- Registriert
- Jan. 2008
- Beiträge
- 472
Hallo Leute
ich möchte mein Mandelbrotprogramm in mehrere Threads unterteilen.
Genauer möchte ich, dass die horizontale Bildberechnung ind Threads aufgeteilt werden soll und man soll die gewünschte Threadanzahl mit einem Parameter übergeben können.
Ich habe mich über Threads informiert und weiss, dass man die Klasse von Thread ableiten muss, den Code in einen "run(){***}" Block einfügen muss und die Threads mit start ausführen muss. Aber bei mir geht das so nicht.
Wie kann ich das bei mir am einfachsten machen? Sollte eigenltich ganz easy sein.
ich möchte mein Mandelbrotprogramm in mehrere Threads unterteilen.
Genauer möchte ich, dass die horizontale Bildberechnung ind Threads aufgeteilt werden soll und man soll die gewünschte Threadanzahl mit einem Parameter übergeben können.
Ich habe mich über Threads informiert und weiss, dass man die Klasse von Thread ableiten muss, den Code in einen "run(){***}" Block einfügen muss und die Threads mit start ausführen muss. Aber bei mir geht das so nicht.
Wie kann ich das bei mir am einfachsten machen? Sollte eigenltich ganz easy sein.
Code:
public class Mandelbrot extends Thread{
public static void show_mandelbrot(Complex c_origin, double c_step, int max_iter, int wposx, int wposy) {
ImageWindow sourceWindow= new ImageWindow(640,480);
sourceWindow.openWindow("mandelbrot",wposx,wposy);
sourceWindow.resizeImage(640,480);
/* Implementieren des Mandelbrot Algorithmus */
Complex[][] pixelarray = new Complex[480][640]; //Hier für jeden Pixel c speichern
int[][] fluchtarray = new int[480][640]; //Hier für jeden Pixel die Fluchtgeschwindigkeit speichern
Complex k = new Complex(0,0);
for(int y=0; y<480; y++){
for(int x=0; x<640; x++){
//Hier würde ich nen run() hinzufügen für die horizontale X-Achse in der For Schleife. <-------------------
double re = c_origin.real()+c_step*x;
double im = c_origin.imag()+c_step*y;
Complex c = new Complex(re, im);
pixelarray[y][x] = c;
for(int i=0; i<max_iter; i++){
if(Math.sqrt(k.real()*k.real()+k.imag()*k.imag()) < 2){
k=(k.sqr()).add(c);
}
else{
fluchtarray[y][x] = i;
k = new Complex(0,0);
break;
}
}
//Bis hier <---------------------------------------------------------
}
}
for(int y=0; y<480; y++){
for(int x=0; x<640; x++){
int farbe = (int)(Math.log10(fluchtarray[y][x]));
sourceWindow.setPixel(x, y, 255-farbe*60, farbe*40, farbe*60);
}
}
sourceWindow.redraw();
}
public static void main(String[] args) {
double t1 = System.currentTimeMillis();
show_mandelbrot(new Complex(-2.5, -1.3), 0.005, 1000, 0, 0);
show_mandelbrot(new Complex(-0.755, -0.1), 0.00002, 1000, 0, 520);
double t2 = System.currentTimeMillis();
System.out.println("Der Methodenaufruf 'show_mandelbrot()' hat " +(t2-t1)/1000 +" Sekunden gebraucht.");
}
}