OpenGL 分形 Sierpinski镂垫

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 }

 

 

原文地址:https://www.cnblogs.com/wangshide/p/2452662.html