02->交互式图形学--用glut库实现Sierpinski镂垫

Sierpinski图形是一类有趣的图形,本文结合交互式图形学教材,讲解Sierpinski镂垫图形生成,作为入门图形学编程的第一课。为了简便,本文就2D来进行讨论。实验环境见01

算法

主要是根据随机性生成一系列的点,这些点在屏幕上显示,发现无序中尽显有序!算法流程如下:

1 在三角形内随机选择一个初始点p(x, y)
2 随机选择三角形顶点之一
3 计算p和随机选择顶点之间的中点q
4 将q对应位置用相应标记在图形中显示出来
5 用这个中点q代替原来的p
6 转到步骤2,直到取得一定数量的点

代码

实验中,初始点p选择三角形的一条中位线的中点,总共生成5000个顶点

 1 #include <glut.h>
 2 #include <stdlib.h>
 3 #include <vector>
 4 using namespace std;
 5
 6 class Point2d {
 7 public:
 8     GLfloat x = 0.0f;
 9     GLfloat y = 0.0f;
10     Point2d(const GLfloat &a, const GLfloat &b) : x(a), y(b) {}
11     Point2d() {}
12 };
13
14 Point2d triVer[3];  // 初始三角形顶点
15
16                     // 计算两点连线的中点
17 Point2d halfScale(const Point2d &a, const Point2d &b) {
18     Point2d res;
19     res.x = (a.x + b.x) / 2.0;
20     res.y = (a.y + b.y) / 2.0;
21     return res;
22 }
23
24 void SierpinskiDisp() {
25
26     // 设置初始三角形顶点
27     triVer[0] = Point2d(-0.8f, -0.8f);
28     triVer[1] = Point2d(0.0f, 0.8f);
29     triVer[2] = Point2d(0.8f, -0.8f);
30
31     vector<Point2d> points(5000);
32
33     // 取三角形一条中位线的中点做为初始三角形内的点
34     Point2d u, v, p;
35     u = halfScale(triVer[0], triVer[1]);
36     v = halfScale(triVer[0], triVer[2]);
37     p = halfScale(u, v);
38     points[0].x = p.x;
39     points[0].y = p.y;
40
41     for (int i = 1; i < 5000; i++) {
42         int j = rand() % 3;
43         p = halfScale(points[i - 1], triVer[j]);
44         points[i] = p;
45     }
46     glClearColor(0.5, 0.5, 0.5, 1.0);
47     glClear(GL_COLOR_BUFFER_BIT);
48
49     // 画三角形顶点
50     glColor3f(1.0f, 0.0f, 0.0f);
51     glPointSize(6.0f);
52     glBegin(GL_POINTS);
53     for (int i = 0; i < 3; i++) {
54         glVertex2f(triVer[i].x, triVer[i].y);
55     }
56     glEnd();
57
58     // 画随机生成的5000个点
59     glColor3f(1.0f, 1.0f, 0.0f);
60     glPointSize(3.0f);
61     glBegin(GL_POINTS);
62     for (int i = 0; i < 5000; i++) {
63         glVertex2f(points[i].x, points[i].y);
64     }
65     glEnd();
66     glFlush();
67 }
68
69 int main(int argc, char *argv[]) {
70     glutInit(&argc, argv);
71     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
72     glutInitWindowPosition(100, 100);
73     glutInitWindowSize(600, 600);
74     glutCreateWindow("Sierpinski镂垫");
75     glutDisplayFunc(&SierpinskiDisp);
76     glutMainLoop();
77 }

结果

原文地址:https://www.cnblogs.com/mjk961/p/9539294.html

时间: 2024-10-05 07:30:37

02->交互式图形学--用glut库实现Sierpinski镂垫的相关文章

图形学第1次作业-2D的Sierpinski镂垫

在基于多边形的Sierpinski镂垫的基础上增加如下功能: 1.按q键退出: 2.右键菜单-随机换一种颜色: 3.在细分三角形之前增加了扰动: 代码如下: #include <Windows.h> #include <cstdio> #include <random> #include <functional> #include "glut.h" typedef GLfloat point2d[2]; point2d v[3] = {

配置VC++2010的glut库

VC++2010是一个成熟稳定的版本,微软的编译工具Visual Studio系列从VC6到如今的VC2019,功能非常强大,我们在开始学习C++和计算机图形学的时候,一般入手<<C++Primer>><<OpenGL编程指南>>一般例子并不会详细讲解开发环境,这是因为C++和C语言还有OpenGL不是某一家公司的产物,而是开放标准,即成立标准委员会由多方协商参与制定,这样才有开源的实现,而在windows上研究相关技术开发商业产品,久而久之形成了惯例即采用

QT中使用Glut库

用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符,就是说没有这个函数的声明.接下来就来安装glut库: 1.先下载glut库 http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip. 2.将下载下来的文件解压,将glut32.lib和glut.lib两个lib文件移到qt

Qt下使用glut库

本人使用的环境 操作系统:windows10 Qt构建套件:qt-mingw4.8.5 + mingw4.4.0 Qt Creator版本:3.6.1 本教程配置针对工程而言,每个工程需要单独配置.   一.下载并解压glut库 我使用的版本下载地址为: http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 解压后得到以下五个文件 二.工程配置 在工程源码路径下新建一个文件夹glut,放入刚刚解压得到的五个文件夹 修改

OpenGL初使用,glut库安装(vs2013)

最近要开始做三维重建,需要使用opencv 和 openGL,第一次使用OpenGL,当然要从装glut库来开始. glut 库文件下载地址如下:http://download.csdn.net/detail/hyqsong/8618163 安装步奏如下: 1.将glut.h,放在vs2013安装目录的include下,新建一个GL目录(没有的话):例如我的路径是: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\GL

Windows平台下Qt中glut库的使用

用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符,就是说没有这个函数的声明.接下来就来安装glut库: 1.先下载glut库http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip. 2.将下载下来的文件解压,将glut32.lib和glut.lib两个lib文件移到qt目

glut库下的主要函数:

glut库下的主要函数: 一.初始化 void glutInit(int* argc,char** argv) 这个函数用来初始化GLUT库.对应main函数的形式应是:int main(int argc,char* argv[]); 这个函数从main函数获取其两个参数. void glutInitWindowSize(int width,int height); void glutInitWindowPosition(int x,int y); 这两个函数很好理解是设置glut程序要产生的窗

windows下的qt creator 和 vs2010配置glut工具库(qt 5.5.0版本)

首先,下载glut工具库所需文件,可以去opengl官网查找,也可在如下链接下载 glut库下载地址 vs2010下配置glut 下载好的文件中有五个文件,将*.h文件拷贝到 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl中 将两个 *.lib拷贝到vs2010的安装目录下的\Microsoft Visual Studio 10.0\VC\lib 将两个*.dll文件拷贝到 C:\Windows\SysWOW64 (6

【计算机图形学】OpenGL+VS2015相关类库配置

1 WiKi OpenGL一直是事实上的计算机图形学标准,截止2016年06月,OpenGL版本已经更新到4.5.不过DirectX发展迅速,大有OpenGL落后的态势,知乎上的该话题的讨论:https://www.zhihu.com/question/23241456.所以OpenGL为了追赶DirectX,推出 了glNext(Vulkan API),相关讨论https://www.zhihu.com/question/28039310. 2 相关资料 图形学的经典书籍是<Computer