Sierpinski三角形:
Sierpinski镂垫:
是一个非常有趣的图案, 有着悠久的历史, 在分形几何中等领域里引起了人们极大地兴趣, 是用递归和随机方式定义的几何形状, 在极限情况下, 它所表现的性质并没有随机性:
生成方法:
生成Sierpinski 镂垫算法描述:
(1)在三角形内部随机选取一个点作为初始点
(2)在三角形的3个顶点中随机选取一个,求出该顶点与初始点连线的中点,画出该中点
(3)将(2)中的中点作为初始点,转到(2)
实现方法(OpenGL C#):
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 using Tao.OpenGl; 7 using Tao.FreeGlut; 8 using Tao.Platform.Windows; 9 10 class Program 11 { 12 static string title = "Sierpinski镂垫"; 13 /// <summary> 14 /// 初始化 15 /// </summary> 16 static void myInit() 17 { 18 // 设置属性 19 Gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 背景色 20 21 // 建立视图 22 Gl.glMatrixMode(Gl.GL_PROJECTION); 23 Gl.glLoadIdentity(); 24 Glu.gluOrtho2D(0.0, 600.0, 0.0, 600.0); 25 } 26 /// <summary> 27 /// 画图函数 28 /// </summary> 29 static void display() 30 { 31 // 在Z平面上定义一个任意的三角形 32 float[,] vertices = new float[3, 3] {{0.0f, 0.0f, 0.0f}, {300f, 600f, 0f}, {600f, 0f, 0f} }; 33 34 // 定义初始点位置 35 float[] p = new float[3] {7.5f, 5.0f, 0.0f }; 36 Random rand1 = new Random(); 37 38 Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); 39 Gl.glColor3f(1.0f, 0.5f, 0.5f); // 颜色 40 41 Gl.glBegin(Gl.GL_POINTS); 42 for (int k = 0; k < 50000; k++) 43 { 44 int j = rand1.Next() % 3; 45 46 p[0] = (p[0] + vertices[j, 0]) / 2; 47 p[1] = (p[1] + vertices[j, 1]) / 2; 48 49 Gl.glVertex3fv(p); 50 } 51 Gl.glEnd(); 52 53 Gl.glFlush(); 54 } 55 56 57 static void reshape(int w, int h) 58 { 59 60 } 61 62 static void Main(string[] args) 63 { 64 Glut.glutInit(); 65 Glut.glutInitDisplayMode(Glut.GLUT_RGBA | Glut.GLUT_SINGLE); 66 Glut.glutInitWindowPosition(400, 100); 67 Glut.glutInitWindowSize(600, 600); 68 Glut.glutCreateWindow(title); 69 70 71 myInit(); 72 Glut.glutDisplayFunc(display); 73 // Glut.glutReshapeFunc(reshape); 74 Glut.glutMainLoop(); 75 } 76 }