首页 > 寺庙

谢尔宾斯基Sierpinski地毯|

谢尔宾斯基Sierpinski地毯

分形之谢尔宾斯基(Sierpinski)地毯

谢尔宾斯基Sierpinski地毯|

前面讲了谢尔宾斯基三角形,和这一节的将把三角形变为正方形,即谢尔宾斯基地毯,它是由瓦茨瓦夫·谢尔宾斯基于1916年提出的一种分形,是自相似集的一种。

谢尔宾斯基地毯的构造与谢尔宾斯基三角形相似,区别仅在于谢尔宾斯基地毯是以正方形而非等边三角形为基础的。将一个实心正方形划分为的9个小正方形,去掉中间的小正方形,再对余下的小正方形重复这一操作便能得到谢尔宾斯基地毯。

结果演示:

代码:

#include iostream

#include cstdlib

#include ctime

#include ctype.h

#include vector

#include math.h

#include iomanip

#include graphics.h

#include conio.h

#include windows.h

#include fstream

#include string

using namespace std;

MOUSEMSG m;

HWND hOut;

struct Node

{

double posx,posy;

int num,lifenum;

double R;

};

struct Node1

{

double posx,posy;

int num,lifenum;

double R;

};

Node box[100000];

Node1 eat[100000];

int flag;

int exit1,exit2,exit3;

double R;

double pi;

void draw()

{

int i,j,k;

double x,y;

//cleardevice();

setlinestyle(PS_SOLID,1);

setlinecolor(BLACK);

for(i=0;iflag;i++){

fillrectangle(box[i].posx-box[i].R,box[i].posy-box[i].R,box[i].posx+box[i].R,box[i].posy+box[i].R);

}

FlushBatchDraw();

}

void ff()

{

int i,j,n;

double k;

R=R/3.0;

n=0;

for(i=0;iflag;i++){

eat[n].posx=box[i].posx-2*box[i].R;

eat[n].posy=box[i].posy-2*box[i].R;

eat[n].R=R;

eat[n+1].posx=box[i].posx;

eat[n+1].posy=box[i].posy-2*box[i].R;

eat[n+1].R=R;

eat[n+2].posx=box[i].posx+2*box[i].R;

eat[n+2].posy=box[i].posy-2*box[i].R;

eat[n+2].R=R;

eat[n+3].posx=box[i].posx-2*box[i].R;

eat[n+3].posy=box[i].posy;

eat[n+3].R=R;

eat[n+4].posx=box[i].posx+2*box[i].R;

eat[n+4].posy=box[i].posy;

eat[n+4].R=R;

eat[n+5].posx=box[i].posx-2*box[i].R;

eat[n+5].posy=box[i].posy+2*box[i].R;

eat[n+5].R=R;

eat[n+6].posx=box[i].posx;

eat[n+6].posy=box[i].posy+2*box[i].R;

eat[n+6].R=R;

eat[n+7].posx=box[i].posx+2*box[i].R;

eat[n+7].posy=box[i].posy+2*box[i].R;

eat[n+7].R=R;

n+=8;

}

for(i=0;in;i++){

box[i].posx=eat[i].posx;

box[i].posy=eat[i].posy;

box[i].R=eat[i].R;

}

flag=n;

coutflagendl;

}

void move()

{

int i,j,k;

draw();

Sleep(100);

_getch();

ff();

}

void initialization()

{

int i,j,k;

hOut=initgraph(500, 500,SHOWCONSOLE);

exit1=0;

flag=1;

R=75;

pi=3.141592653;

setbkcolor(WHITE);

setlinecolor(BLACK);

settextcolor(BLACK);

//setfillcolor(BLACK);

box[0].posx=250;box[0].posy=250;

box[0].R=75;

}

void carry()

{

initialization();

BeginBatchDraw();

while(exit1==0){

move();

}

closegraph();

EndBatchDraw();

}

int main()

{

carry();

}

演示视频:

这个是数学文化的作业,我短时间完成度有限,有一个谢尔宾斯基四边形我没想好怎么做,有机会可以考虑。


|谢尔宾斯基Sierpinski地毯

 

谢尔宾斯基Sierpinski地毯|
  • 黑执事讲的到底是什么啊|
  • 黑执事讲的到底是什么啊| | 黑执事讲的到底是什么啊| ...

    谢尔宾斯基Sierpinski地毯|
  • 阿鲁高的愚行任务怎么做|
  • 阿鲁高的愚行任务怎么做| | 阿鲁高的愚行任务怎么做| ...