
高分悬赏C++语言编写的分形图案,急!!!!
最好是程序包,调试好了没问题的,能用语言介绍一下最好,满意了还有50分!!!!我邮箱ycl8@vip.qq.com,记得发前联系我...
最好是程序包,调试好了没问题的,能用语言介绍一下最好,满意了还有50分!!!!
我邮箱ycl8@vip.qq.com ,记得发前联系我 展开
我邮箱ycl8@vip.qq.com ,记得发前联系我 展开
1个回答
展开全部
program BrotPlot;
uses GRAPH, Dos, CRT, ZOOMKEYS;
const
WIDTH = 350;
HEIGHT= 350;
Magic1= 477;
const
AEscape:double = 4.0;
BASE:Integer = 100;
LowReal : double = -2.0;
HighReal : double = 1.0;
LowImag : double = -1.5;
HighImag : double = 1.5;
Done : boolean = FALSE;
Zooming : boolean = FALSE;
Var
RealStep, ImagStep,
RealPart, ImagPart:double;
Zreal,Zimag,Zt1,Zt2,Zt3:double;
ZS,ZD,Z2:double;
MaxIter: integer;
Count: integer;
TotPts, Mgi: LongInt;
i, j: integer;
Seed0:LongInt;
Ch: char;
SaveF: text;
Hr,Mn,Sd,s1:Word;
Time1,Time2:double;
NSum: LongInt;
procedure VgaDrive; external;
procedure InitGraphics;
var
GD,GM:integer;
ErrorCode:integer;
begin
GD := Detect; GM:=VGAHI;
InitGraph (GD,GM,'');
ErrorCode := GraphResult;
if ErrorCode<>grOK then
begin
Writeln('Graphics error:');
Writeln(GraphErrorMsg(ErrorCode));
Writeln('Program aborted...');
HALT;
end;
end;
procedure SetUpperLimit;
begin
MaxIter:=BASE+(5*round(ln( 1/(abs((HighReal-LowReal)/4)))));
end;
procedure SetNewPalette (Which: integer);
const
EGAVGAcolors : PaletteTYPE =
( Size: 16;
Colors: (0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63)
);
PUREcolors : PaletteTYPE =
( Size: 16;
Colors: (0,32,4,36,60,39,16,2,18,58,23,8,1,9,57,15)
);
begin
case Which of
1: SetAllPalette (EGAVGAcolors);
2: SetAllPalette (PUREcolors);
end;
end;
procedure CyclePalette;
var Current: PaletteTYPE;
TempColor: shortint;
i: integer;
begin
GetPalette (Current);
TempColor := Current.Colors[1];
for i := 1 to Current.Size - 2 do begin
Current.Colors[i] := Current.Colors[i+1];
end;
Current.Colors[Current.Size-1] := TempColor;
SetAllPalette (Current);
end;
procedure HandleKey (var Done, Zooming: boolean);
var Ch: char;
begin
Ch := ReadKey;
case UpCase(Ch) of
#27,'Q': Done := TRUE;
'C': CyclePalette;
else Zooming := TRUE;
end;
end;
Label
Lab1,Lab2;
begin
ZOOMKEYS.SetZoomCursor;
ZOOMKEYS.SetBounds (0, 0, WIDTH, HEIGHT);
if RegisterBGIdriver(@VGADrive) < 0 then
begin
Writeln('Error registering driver: ',GraphErrorMsg(GraphResult));
Halt(1);
end;
InitGraphics;
SetNewPalette (2);
TotPts:=LongInt(Width)*Height ;
TotPts:=TotPts+1;
DirectVideo:=False;
Mgi:=0;
repeat
SetUpperLimit ;
GotoXy(5,25);
Write('<Esc>-Escape, <C>-Palette, <other_keys>-Pause');
ImagStep := (HighImag - LowImag) / (HEIGHT -1);
RealStep := (HighReal - LowReal) / (WIDTH - 1);
GetTime(Hr,Mn,Sd,s1);
Time1:=(Hr*60.0+Mn)*60.0+Sd+S1/100;
NSum:=0;
repeat
J:=Mgi div Width;
I:=Mgi -LongInt(j)*Width;
RealPart := LowReal + (i * RealStep);
ImagPart := LowImag + (j * ImagStep);
Zreal:=0.0; Zimag:=0.0;
Zt2:=0; Zt3:=0;
Count := 1;
repeat
Zimag:=2*Zreal*Zimag +ImagPart;
Zreal:=Zt2-Zt3 +RealPart;
Zt2:=Sqr(Zreal); Zt3:=Sqr(Zimag);
Inc(Count);
until ( Zt2+Zt3>= AEscape) or (Count = MaxIter);
Nsum:=Nsum+Count;
if Count = MaxIter
then PutPixel (i, j, 0)
else PutPixel (i, j, Count mod 15+1);
Mgi:=(Mgi+1)*Magic1 mod TotPts -1;
if (Mgi<Width) and KeyPressed then
begin
HandleKey (Done, Zooming);
if Done or Zooming then goto Lab1;
end;
until Mgi=0;
Lab1:
GetTime(Hr,Mn,Sd,S1);
Time2:=(Hr*60.0+Mn)*60.0+Sd+S1/100;
Textcolor(7);
GotoXy(5,24);
WriteLn('Time used:',(Time2-Time1):6:2,
', Average Iterating times:',Nsum/TotPts:5:1);
Textcolor(4);
if Not Done then
begin
ZOOMKEYS.GetScaledRealBounds
(LowReal,LowImag,HighReal,HighImag,Done);
ClearDevice;
Zooming := FALSE;
end;
until Done;
CloseGraph;
TextMode(CO80);
end.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询