

/**//* two-dimensional Sierpinski gasket */

/**//* generated using randomly selected vertices */

/**//* and bisection */

#include <GL/glut.h>

void myinit()


{


/**//* attributes */

glClearColor(1.0, 1.0, 1.0, 1.0); /**//* white background */

glColor3f(1.0, 0.0, 0.0); /**//* draw in red */
}

void reshape(int w,int h)


{
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluOrtho2D(0.0, 50.0, 0.0, 50.0);/**//* set up viewing 50.0 x 50.0 camera coordinate window with origin lower left */

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

}

void display()


{

/**//* A triangle */

GLfloat vertices[3][2]=
{
{0.0,0.0},
{25.0,50.0},
{50.0,0.0}};
int j, k;

int rand(); /**//* standard random number generator */

GLfloat p[2] =
{7.5, 5.0}; /**//* arbitrary initial point inside triangle */

glClear(GL_COLOR_BUFFER_BIT); /**//*clear the window */
glBegin(GL_POINTS);


/**//* compute and plot 5000 new points */

for( k=0; k<5000; k++)

{

j=rand()%3; /**//* pick a vertex at random */


/**//* compute point halfway between selected vertex and old point */

p[0] = (p[0]+vertices[j][0])/2.0;
p[1] = (p[1]+vertices[j][1])/2.0;


/**//* plot new point */

glVertex2fv(p);

}
glEnd();

glFlush(); /**//* clear buffers */
}

int main(int argc, char** argv)


{


/**//* standard GLUT initialization */
glutInit(&argc,argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); /**//* default, not needed */

glutInitWindowSize(500,500); /**//* 500 x 500 pixel window */

glutInitWindowPosition(0,0); /**//* place window top left on display */

glutCreateWindow("Sierpinski Gasket"); /**//* window title */

glutDisplayFunc(display); /**//* display callback invoked when window opened */
glutReshapeFunc(reshape);

myinit(); /**//* set attributes */

glutMainLoop(); /**//* enter event loop */
}



/**//* recursive subdivision of triangle to form Sierpinski gasket */

/**//* number of recursive steps given on command line */

#include <GL/glut.h>


/**//* initial triangle */


GLfloat v[3][2]=
{
{-1.0, -0.58},
{1.0, -0.58},
{0.0, 1.15}};

int n;

void triangle( GLfloat *a, GLfloat *b, GLfloat *c)


/**//* specify one triangle */


{
glVertex2fv(a);
glVertex2fv(b);
glVertex2fv(c);
}

void divide_triangle(GLfloat *a, GLfloat *b, GLfloat *c, int m)


{


/**//* triangle subdivision using vertex numbers */

GLfloat v0[2], v1[2], v2[2];
int j;
if(m>0)

{
for(j=0; j<2; j++) v0[j]=(a[j]+b[j])/2;
for(j=0; j<2; j++) v1[j]=(a[j]+c[j])/2;
for(j=0; j<2; j++) v2[j]=(b[j]+c[j])/2;
divide_triangle(a, v0, v1, m-1);
divide_triangle(c, v1, v2, m-1);
divide_triangle(b, v2, v0, m-1);
}

else triangle(a,b,c); /**//* draw triangle at end of recursion */
}


void display()


{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
divide_triangle(v[0], v[1], v[2], n);
glEnd();
glFlush();
}

void myinit()


{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-2.0, 2.0, -2.0, 2.0);
glMatrixMode(GL_MODELVIEW);
glClearColor (1.0, 1.0, 1.0, 1.0);
glColor3f(0.0,0.0,1.0);
}

int main(int argc, char **argv)


{

n=3; /**//* or set number of subdivision steps here */
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutCreateWindow("Sierpinski Gasket");
glutDisplayFunc(display);
myinit();
glutMainLoop();
}


/**//* recursive subdivision of a tetrahedron to form 3D Sierpinski gasket */

/**//* number of recursive steps given on command line */

#include <stdlib.h>
#include <GL/glut.h>


/**//* initial tetrahedron */


GLfloat v[4][3]=
{
{0.0, 0.0, 1.0},
{0.0, 0.942809, -0.33333},

{-0.816497, -0.471405, -0.333333},
{0.816497, -0.471405, -0.333333}};


GLfloat colors[4][3] =
{
{1.0, 0.0, 0.0},
{0.0, 1.0, 0.0},

{0.0, 0.0, 1.0},
{0.0, 0.0, 0.0}};

int n;

void triangle(GLfloat *va, GLfloat *vb, GLfloat *vc)


{
glVertex3fv(va);
glVertex3fv(vb);
glVertex3fv(vc);
}

void tetra(GLfloat *a, GLfloat *b, GLfloat *c, GLfloat *d)


{
glColor3fv(colors[0]);
triangle(a, b, c);
glColor3fv(colors[1]);
triangle(a, c, d);
glColor3fv(colors[2]);
triangle(a, d, b);
glColor3fv(colors[3]);
triangle(b, d, c);
}

void divide_tetra(GLfloat *a, GLfloat *b, GLfloat *c, GLfloat *d, int m)


{

GLfloat mid[6][3];
int j;
if(m>0)

{

/**//* compute six midpoints */

for(j=0; j<3; j++) mid[0][j]=(a[j]+b[j])/2;
for(j=0; j<3; j++) mid[1][j]=(a[j]+c[j])/2;
for(j=0; j<3; j++) mid[2][j]=(a[j]+d[j])/2;
for(j=0; j<3; j++) mid[3][j]=(b[j]+c[j])/2;
for(j=0; j<3; j++) mid[4][j]=(c[j]+d[j])/2;
for(j=0; j<3; j++) mid[5][j]=(b[j]+d[j])/2;


/**//* create 4 tetrahedrons by subdivision */

divide_tetra(a, mid[0], mid[1], mid[2], m-1);
divide_tetra(mid[0], b, mid[3], mid[5], m-1);
divide_tetra(mid[1], mid[3], c, mid[4], m-1);
divide_tetra(mid[2], mid[4], d, mid[5], m-1);

}

else(tetra(a,b,c,d)); /**//* draw tetrahedron at end of recursion */
}


void display()


{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
divide_tetra(v[0], v[1], v[2], v[3], n);
glEnd();
glFlush();
}


void myReshape(int w, int h)


{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-2.0, 2.0, -2.0 * (GLfloat) h / (GLfloat) w,
2.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0);
else
glOrtho(-2.0 * (GLfloat) w / (GLfloat) h,
2.0 * (GLfloat) w / (GLfloat) h, -2.0, 2.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
}


int main(int argc, char **argv)


{

n=3; /**//* or enter number of subdivision steps here */
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutCreateWindow("3D Gasket");
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glEnable(GL_DEPTH_TEST);
glClearColor (1.0, 1.0, 1.0, 1.0);
glutMainLoop();
}

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述