トップ 差分 一覧 ソース 検索 ヘルプ ログイン

マンデルブロ集合

void __fastcall TSDIAppForm::ButtonGoClick(TObject *Sender)

{
 double zr,zi,zrN,ziN;
 double Cr2;
 double Ci2;
 int imax;
 int i,ix,iy,col;
 Cr1 = StrToFloat(EditX->Text);
 Ci1 = StrToFloat(EditY->Text);
 wid = StrToFloat(EditW->Text);
 Cr2 = Cr1 + wid;
 Ci2 = Ci1 + wid;
 imax = StrToFloat(EditM->Text);
 pixx = Image1->Width;
 pixy = Image1->Height;
 dCr=(double)wid/(double)pixx;
 dCi=(double)wid/(double)pixy;
 Image1->Canvas->Brush->Color = clBlack;
 Image1->Canvas->Brush->Style = bsSolid;
 Image1->Canvas->FillRect(Image1->Canvas->ClipRect);
 for ( Ci=Ci1,iy=pixy ; Ci<=Ci2 ; Ci+=dCi, iy-- ) {
  for ( Cr=Cr1, ix=0; Cr<=Cr2; Cr+=dCr, ix++ ) {
	  zr=0.0; zi=0.0;
	  for ( i=0; i<imax; i++ ) {
		  zrN = zr*zr-zi*zi+Cr;
		  ziN = 2.0*zr*zi+Ci;
		  if (zrN*zrN+ziN*ziN>4.0) break;
		  zr=zrN; zi=ziN;
	  }
	  if (i==imax) col = 16;
	  else col = i%16;
	  Image1->Canvas->Pen->Color = (TColor)col_t[col];
	  Image1->Canvas->MoveTo(ix,iy);
	  Image1->Canvas->LineTo(ix+1,iy);
  }
  Application->ProcessMessages();
 }
 x1=-1;
}