谢尔宾斯基(Sierpinski)三角形
谢尔宾斯基(Sierpinski)三角形
谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集。也有的资料将其称之为谢尔宾斯基坟垛.
其生成过程为:
1.取一个实心的三角形。(多数使用等边三角形)
2.沿三边中点的连线,将它分成四个小三角形。
3.去掉中间的那一个小三角形。
4.对其余三个小三角形重复1。
结果演示:
代码:
#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 posx1,posy1;
double posx2,posy2;
double posx3,posy3;
int num,lifenum;
};
struct Node1
{
double posx1,posy1;
double posx2,posy2;
double posx3,posy3;
int num,lifenum;
};
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++){
line(box[i].posx1,box[i].posy1,box[i].posx2,box[i].posy2);
line(box[i].posx2,box[i].posy2,box[i].posx3,box[i].posy3);
line(box[i].posx1,box[i].posy1,box[i].posx3,box[i].posy3);
}
FlushBatchDraw();
}
void ff()
{
int i,j,n;
double k;
R=R/2.0;
n=0;
for(i=0;iflag;i++){
eat[n].posx1=box[i].posx1;
eat[n].posy1=box[i].posy1;
eat[n].posx2=eat[n].posx1+R/2;
eat[n].posy2=eat[n].posy1+R/2*sqrt(3);
eat[n].posx3=eat[n].posx1-R/2;
eat[n].posy3=eat[n].posy1+R/2*sqrt(3);
eat[n+1].posx1=eat[n].posx2;
eat[n+1].posy1=eat[n].posy2;
eat[n+1].posx2=eat[n+1].posx1+R/2;
eat[n+1].posy2=eat[n+1].posy1+R/2*sqrt(3);
eat[n+1].posx3=eat[n+1].posx1-R/2;
eat[n+1].posy3=eat[n+1].posy1+R/2*sqrt(3);
eat[n+2].posx1=eat[n].posx3;
eat[n+2].posy1=eat[n].posy3;
eat[n+2].posx2=eat[n+2].posx1+R/2;
eat[n+2].posy2=eat[n+2].posy1+R/2*sqrt(3);
eat[n+2].posx3=eat[n+2].posx1-R/2;
eat[n+2].posy3=eat[n+2].posy1+R/2*sqrt(3);
n+=3;
}
for(i=0;in;i++){
box[i].posx1=eat[i].posx1;box[i].posy1=eat[i].posy1;
box[i].posx2=eat[i].posx2;box[i].posy2=eat[i].posy2;
box[i].posx3=eat[i].posx3;box[i].posy3=eat[i].posy3;
}
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=400;
pi=3.141592653;
setbkcolor(WHITE);
setlinecolor(BLACK);
settextcolor(BLACK);
box[0].posx1=250;box[0].posy1=10;
box[0].posx2=50;box[0].posy2=10+200*sqrt(3);
box[0].posx3=450;box[0].posy3=10+200*sqrt(3);
}
void carry()
{
initialization();
BeginBatchDraw();
while(exit1==0){
move();
}
closegraph();
EndBatchDraw();
}
int main()
{
carry();
}
演示视频:
以上就是(谢尔宾斯基(Sierpinski)三角形)全部内容,收藏起来下次访问不迷路!