当前位置:首页 > 知识 > 谢尔宾斯基(Sierpinski)三角形

谢尔宾斯基(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)三角形)全部内容,收藏起来下次访问不迷路!