Fraktale.Problem z rysowaniem.
Witam.
Mam problem z napisaniem programu do rysowania fraktali. Mam już cały kod,ale po uruchomieniu wyświetla mi się czarny ekran.Czy mógłby ktoś znaleźć błąd w kodzie?
Treść polecenia :
Rozważmy następujące
odwzorowanie na płaszczyźnie:
zn+1 = zn^2 +c
gdzie: c jest stałą liczbą zespoloną. Jeżeli c = - 0.123 + j 0.745, a z0(z zero) = 0.5 + j 0.5,
to z1 = - 0.123 + j 1.245.
Zbiory Julia tworzą te punkty na płaszczyźnie zespolonej, których odległość od
początku układu współrzędnych jest skończona.
Napisz program, który generuje nMax = 30 iteracji powyższego odwzorowania.
Generuj kolejne iteracje dopóki ich odległość od początku układu współrzędnych będzie mniejsza od 2. Punkt początkowy z0(z zero)= x0 + j y0 wybierz arbitralnie ale tak, aby -1.5<x0 <1.5 i -1.5<y0 <1.5. Jeśli po nMax =30 iteracjach odległość jest wciąż mniejsza od 2 to na wykresie w punkcie o współrzędnych x0 i y0 rysujemy piksel. Do obliczeń, dla dostatecznie dużej liczby punktów, wykorzystaj zagnieżdżone pętle for. Obliczenia przeprowadź dla:
c = - 0.75, c = - 0.391 – j 0.587, c = - 0.123 + j 0.745
mój kod:
#include <iostream>
#include <complex>
#define USE_CONSOLE
#include<vector>
#include <allegro.h>
#define _USE_MATH_DEFINES
#include<cmath>
using namespace std;
int main()
{
complex < float > c;
double x;
double y;
complex < float > z;
int i = 0;
{
allegro_init();
install_keyboard();
set_color_depth( desktop_color_depth() );
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
acquire_screen();
c =( - 0.123, 0.745 );
for( x = 0; x < 640; x++ )
{
for( y = 0; y < 480; y++ )
{
z =(( 3 * x ) / 640 - 1.5,( 480 - y ) / 160 - 1.5 );
while( i < 30 )
{ z = z * z + c;
i = i + 1;
}
if( abs( z ) < 2.0 )
{ putpixel( screen, x, y, makecol( 255, 211, 244 ) ); }
}
}
c =( - 0.75, 0.0 );
for( x = 0; x < 640; y++ )
{
for( y = 0; y < 480; y++ )
{
z =(( 3 * x ) / 640 - 1.5,( 480 - y ) / 160 - 1.5 );
while( i < 30 )
{
z = z * z + c;
i = i + 1;
}
if( abs( z ) < 2.0 )
{ putpixel( screen, x, y, makecol( 145, 225, 211 ) ); }
}
}
c =( - 0.391, - 0, 587 );
for( x = 0; x < 640; y++ )
{
for( y = 0; y < 480; y++ )
{
z =(( 3 * x ) / 640 - 1.5,( 480 - y ) / 160 - 1.5 );
while( i < 30 )
{
z = z * z + c;
i = i + 1;
}
if( abs( z ) < 2.0 )
{ putpixel( screen, x, y, makecol( 155, 200, 255 ) ); }
}
}
release_screen();
readkey();
return 0;
}
}
END_OF_MAIN();