• 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 }

     

     

  • 相关阅读:
    算法-heapq模块优先队列
    用find命令删除某目录下及所有子目录中某类型的特定文件
    OpenStack虚拟机virtaulinterfance 网络设备在libvirt的代码梳理
    cinderclient命令行源码解析
    python 多个装饰器的调用顺序分析
    wsgi的environ变量
    Cirros镜像
    写入多个变量到配置文件【linux】
    SecureCRT 私钥登录ec2 报:A protocol error occurred.Too many authentication failures for ec2-user 解决
    S3上备份的json文件转存成parquet文件
  • 原文地址:https://www.cnblogs.com/wangshide/p/2452662.html
Copyright © 2020-2023  润新知