FRAKTALE

Zmodyfikowane graficznie zbiory Mandelbrota i Julii

Wersja 1

Wersja 2

 

Wersja 3

 

Wersja 4

Poniżej opisano procedurę, która umożliwia badanie zbieżności ciągów zespolonych.
W efekcie działania prezentowanego programu uzyskujemy graficzną prezentację zbioru Mandelbrota.

// struktura liczby zespolonej
struct ctype {
float x;
float y;
};

// parametry zbioru Mandelbrota - można z nimi eksperymentować!
float CreMin, CreMax, CimMin, CimMax, MaxSamp;
//obszar poddawany analizie pobierany z okna aplikacji 
CreMin=StrToFloat(Edit1->Text);
CreMax=StrToFloat(Edit2->Text);
CimMin=StrToFloat(Edit3->Text);
CimMax=StrToFloat(Edit4->Text);

//zbieżnosc ciągu w:
float CreMin_, CreMax_, CimMin_, CimMax_;
//obszar pobierany z okna aplikacji
CreMin_=StrToFloat(Edit5->Text);
CreMax_=StrToFloat(Edit7->Text);
CimMin_=StrToFloat(Edit8->Text);
CimMax_=StrToFloat(Edit9->Text);

//maksymalna ilość próbek wprowadzana z okna aplikacji
MaxSamp=StrToFloat(Edit6->Text);

int midx, midy;
midx = Image1->Width/ 2;
midy = Image1->Height / 2;
float CStepX,CStepY;
CStepX= (CreMax-CreMin)/Image1->Width;
CStepY= (CimMax-CimMin)/Image1->Height;

ctype C, Z, Zo;
long Count1;

int posX,posY;
posY=0;


// pętla dla osi pionowej
for(C.y=CimMin; C.y<CimMax; C.y+=CStepY)
{
    posY++;
    Form1->ProgressBar1->Position=100*(C.y-CimMin)/(CimMax-CimMin);

    posX=0;
    // pętla dla osi poziomej
    for(C.x=CreMin; C.x<CreMax; C.x+=CStepX)
    {
        posX++;

        Zo.x = 0;
        Zo.y = 0;

        // pętla obliczająca stopień zbieżności, tzn.
        // ile razy dana liczba spełnia przypisanie z=z^2
        cnt1 = 0;
        do
        {
            // liczba zespolona do kwadratu
            Z.x = pow(Zo.x,2)-pow(Zo.y,2)+C.x;
            Z.y = 2*Zo.x*Zo.y+C.y;
            Zo.x = Z.x;
            Zo.y = Z.y;
            cnt1++;
        } while ( (cnt1<=MaxSamp) && ((Z.x>CreMin_) && (Z.x<CreMax_) && (Z.y>CimMin_) && (Z.y<CimMax_) ) );

        Image1->Canvas->Pen->Color=(cnt1*(16+16*256));
        Image1->Canvas->MoveTo(posX,posY);
        Image1->Canvas->LineTo(posX+1,posY+1);
    }

}

Kody źródłowe aplikacji umożliwiającej kreślenie zbioru Mandelbrota i Julii

Aplikacja bazująca na ww. kodach