用C语言或C++编程显示分形巴恩斯利蕨
2个回答
展开全部
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<bios.h>
#define NUM 10
#define Min(x,y) ((x)<(y)?(x):(y))
#define Max(x,y) ((x)>(y)?(x):(y))
void image_draw(char finename[13],int color);
int main(void)
{
int color;
char filename[13];
clrscr();
window(20,8,60,12);
textattr(WHITE|BLUE*16);
clrscr();
cprintf("\n ENTER filename:");
cscanf("%s",filename);
cprintf("\n Enter picture color(2~15):");
cscanf("%d",&color);
image_draw(filename,color);
getch();
exit(0);
}
void image_draw(char *filename,int color)
{
int i, j, k, no_transformations, temp, xoffset, yoffset;
int px, py, p_cum[7], flag=0, mo=1, dr=VGA;
float a[NUM][7], f, p_sum=0, xscale, yscale;
float newx=0, XMin=0, XMax=0, YMax=0, YMin=0, x=0, y=0;
FILE *fin;
char ch='-1';
if((fin=fopen(filename,"rb"))==NULL)
{
cprintf("\n File '%s' not found.",filename);
getch();
exit(0);
}
fscanf(fin,"%d",&no_transformations);
for(i=0;i<no_transformations;i++)
{
for(j=0;j<7;j++)
{
fscanf(fin,"%f",&f);
a[i][j]=f;
}
}
fclose(fin);
initgraph(&dr,&mo,"");
setbkcolor(1);
for(i=0;i<no_transformations;i++)
{
p_sum+=a[i][6];
p_cum[i]=p_sum*32767;
}
while (ch!=27)
{
for(i=0;i<256;i++)
{
temp=rand();
for(k=0;k<no_transformations-1;k++)
{
if(temp<p_cum[k])
break;
}
newx=(a[k][0]*x+a[k][1]*y+a[k][4]);
y=(a[k][2]*x+a[k][3]*y+a[k][5]);
x=newx;
if((flag==0)&&(i>15))
{
XMax=Max(x,XMax);XMin=Min(x,XMin);
YMax=Max(y,YMax);YMin=Min(y,YMin);
}
else
{
px=(x*xscale+xoffset);
py=(y*yscale+yoffset);
if((px>=0)&&(px<639)&&(py>=0)&&(py<349))
putpixel(px,349-py,color);
}
}
if(flag==0)
{
xscale=418/(XMax-XMin);
yscale=Min(315/(YMax-YMin),xscale/1.38);
if(yscale<xscale/1.38);
xscale=1.38*yscale;
xoffset=320-(XMax+XMin)*xscale/2;
yoffset=175-(YMax+YMin)*yscale/2;
flag=1;
}
if(bioskey(1)) ch=bioskey(0);
}
closegraph();
}
更多追问追答
追问
其他地方看到过这个程序
追答
这个在VC6上编译通不过的,在TC上可以编译通过,但画出来的图形有点怪。。。VC6上可以把结果存在已张图里,
2017-07-21
展开全部
t=&n;这错了,如下:*t=n;//这里改下就好了你是要给t赋值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询