void Mandelbrot(long double KameraX, long double KameraY, long double Zoom, int Bildbreite, int Bildhoehe, int Nmax, int Abbruchwert, uint32_t* Bild) { uint32_t i = 0; int SchrittCntX = 0; int SchrittCntY = 0; //Der interessante Bereich auf der X/Realachse geht von -3 - 3 bei Zoom 1 long double Kamerabreite = 4/Zoom; //Der interessante Bereich auf der Y/Imaginärachse geht von -2i bis 2i long double Kamerahoehe = 3/Zoom; //Das Sichtfeld der Kamera auf der imaginären Ebene geht von der Kameraposition in jede Richtung die halbe Sichtweite(Kamerabreite Kamerahoehe) long double AusschnittStartX = KameraX - ( Kamerabreite/2 ); long double AusschnittStartY = KameraY - ( Kamerahoehe/2 ); //Die Schrittweite ergibt sich aus der Ausschnittbreite aufgeteilt auf die Anzahl der Bildpunkte long double SchrittweiteX = Kamerabreite / Bildbreite; long double SchrittweiteY = Kamerahoehe / Bildhoehe; long double CRea = AusschnittStartX; long double CIma = AusschnittStartY; long double ZRea = 0; long double ZIma = 0; while (SchrittCntY < Bildhoehe) { while (SchrittCntX < Bildbreite) { ZRea = 0; ZIma = 0; while ( ( (ZRea * ZRea) + (ZIma * ZIma) <= Abbruchwert ) & (i < Nmax) ) //Solange BetragZ kleiner 4 und nicht häufiger als Nmax durchgelaufen { ZRea = (ZRea * ZRea) - (ZIma * ZIma) + CRea; ZIma = (ZRea * ZIma) + (ZIma * ZRea) + CIma; i++; } // printf("%d",i); if(i == Nmax) { Bild[ SchrittCntX + SchrittCntY*Bildbreite ] = 0; // printf("0"); } else { Bild[ SchrittCntX + SchrittCntY*Bildbreite ] = ((11 * i) << R) | ((13 * i) << G) | ((17 * i) << B); } i = 0; CRea += SchrittweiteX; SchrittCntX ++; } SchrittCntX = 0; // printf("\n"); CRea = AusschnittStartX; CIma += SchrittweiteY; SchrittCntY ++; } SchrittCntY = 0; CIma = AusschnittStartY; } void Mandelbrot2(long double KameraX, long double KameraY, long double Zoom, int Bildbreite, int Bildhoehe, int Nmax, int Abbruchwert, uint32_t *Bild) { int i = 0; int X = 0; int Y = 0; //Der interessante Bereich auf der X/Realachse geht von -3 - 3 bei Zoom 1 long double Kamerabreite = 4/Zoom; //Der interessante Bereich auf der Y/Imaginärachse geht von -2i bis 2i long double Kamerahoehe = 3/Zoom; //Das Sichtfeld der Kamera auf der imaginären Ebene geht von der Kameraposition in jede Richtung die halbe Sichtweite(Kamerabreite Kamerahoehe) long double AusschnittStartX = KameraX - ( Kamerabreite/2 ); long double AusschnittEndeX = KameraX + ( Kamerabreite/2 ); long double AusschnittStartY = KameraY - ( Kamerahoehe/2 ); long double AusschnittEndeY = KameraY + ( Kamerahoehe/2 ); //Die Schrittweite ergibt sich aus der Ausschnittbreite aufgeteilt auf die Anzahl der Bildpunkte long double SchrittweiteX = Kamerabreite / Bildbreite; long double SchrittweiteY = Kamerahoehe / Bildhoehe; double complex C = AusschnittStartX + (AusschnittStartY)*I; double complex Z = 0 + (0)*I; while(Y < Bildhoehe) { while(X < Bildbreite) { //(ZRea * ZRea) + (ZIma * ZIma) while( ( (creal(Z) * creal(Z) + cimag(Z) * cimag(Z)) <= Abbruchwert ) & (i < Nmax) ) { Z = (Z*Z)+C; i++; } if(i == Nmax) { Bild[X + (Y * Bildbreite)] = 0; //printf("0"); } else { Bild[X + (Y * Bildbreite)] = ((23 * i) << R) | ((29 * i) << G) | ((31 * i) << B); //printf("%d", i); } //printf("%.2f + %.2fi wurde mit %d berechnet\n", (creal(C)), (cimag(C)), i); i = 0; X++; C = C + ( (double complex)SchrittweiteX + (0)*I ); Z = 0 + (0)*I; } //printf("\n"); X = 0; C = ( ((double complex)AusschnittStartX) + ( (cimag(C) + SchrittweiteY)*I) ); Y++; } } [/c]