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