02->交互式图形学--用glut库实现Sierpinski镂垫
Sierpinski图形是一类有趣的图形,本文结合交互式图形学教材,讲解Sierpinski镂垫图形生成,作为入门图形学编程的第一课。为了简便,本文就2D来进行讨论。实验环境见01
算法
主要是根据随机性生成一系列的点,这些点在屏幕上显示,发现无序中尽显有序!算法流程如下:
在三角形内随机选择一个初始点p(x, y)
随机选择三角形顶点之一
计算p和随机选择顶点之间的中点q
将q对应位置用相应标记在图形中显示出来
用这个中点q代替原来的p
转到步骤2,直到取得一定数量的点
代码
实验中,初始点p选择三角形的一条中位线的中点,总共生成5000个顶点
#include <glut.h>
#include <stdlib.h>
#include <vector>
using namespace std; class Point2d {
public:
GLfloat x = 0.0f;
GLfloat y = 0.0f;
Point2d(const GLfloat &a, const GLfloat &b) : x(a), y(b) {}
Point2d() {}
}; Point2d triVer[]; // 初始三角形顶点 // 计算两点连线的中点
Point2d halfScale(const Point2d &a, const Point2d &b) {
Point2d res;
res.x = (a.x + b.x) / 2.0;
res.y = (a.y + b.y) / 2.0;
return res;
} void SierpinskiDisp() { // 设置初始三角形顶点
triVer[] = Point2d(-0.8f, -0.8f);
triVer[] = Point2d(0.0f, 0.8f);
triVer[] = Point2d(0.8f, -0.8f); vector<Point2d> points(); // 取三角形一条中位线的中点做为初始三角形内的点
Point2d u, v, p;
u = halfScale(triVer[], triVer[]);
v = halfScale(triVer[], triVer[]);
p = halfScale(u, v);
points[].x = p.x;
points[].y = p.y; for (int i = ; i < ; i++) {
int j = rand() % ;
p = halfScale(points[i - ], triVer[j]);
points[i] = p;
}
glClearColor(0.5, 0.5, 0.5, 1.0);
glClear(GL_COLOR_BUFFER_BIT); // 画三角形顶点
glColor3f(1.0f, 0.0f, 0.0f);
glPointSize(6.0f);
glBegin(GL_POINTS);
for (int i = ; i < ; i++) {
glVertex2f(triVer[i].x, triVer[i].y);
}
glEnd(); // 画随机生成的5000个点
glColor3f(1.0f, 1.0f, 0.0f);
glPointSize(3.0f);
glBegin(GL_POINTS);
for (int i = ; i < ; i++) {
glVertex2f(points[i].x, points[i].y);
}
glEnd();
glFlush();
} int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(, );
glutInitWindowSize(, );
glutCreateWindow("Sierpinski镂垫");
glutDisplayFunc(&SierpinskiDisp);
glutMainLoop();
}
结果
02->交互式图形学--用glut库实现Sierpinski镂垫的更多相关文章
- 配置VC++2010的glut库
VC++2010是一个成熟稳定的版本,微软的编译工具Visual Studio系列从VC6到如今的VC2019,功能非常强大,我们在开始学习C++和计算机图形学的时候,一般入手<<C++P ...
- OpenGL学习之windows下安装opengl的glut库
OpenGL学习之windows下安装opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装. Windows环境下的GLUT下载地址:(大小约为15 ...
- Windows平台下Qt中glut库的使用
用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符 ...
- 【转】Qt下使用glut库
ps:这个说的很明白,尤其是win10环境下用mingw环境时编程时碰到的问题, 1.加 windows.h 2.在.pro 添加libs 博文地址:Qt下使用glut库 本人使用的环境 ...
- Qt工程使用第三方库——Qt下使用glut库
本人使用的环境 操作系统:windows10 Qt构建套件:qt-mingw4.8.5 + mingw4.4.0 Qt Creator版本:3.6.1 本教程配置针对工程而言,每个工程需要单独配置 ...
- QT中使用Glut库
用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符 ...
- linux 下使用opengl的glut库显示和旋转BMP图片
效果图: 这里显示的图和原图有明显的色差,目前猜测是opengl渲染时的颜色表顺序跟BMP文件里的颜色表顺序相反导致. BMP里应该是BGRBGRBRG... ,而opengl渲染时应该是按照RGBR ...
- 计算机图形学——OpenGL开发库开发库
vc++6.0 有 OpenGL 的东西.有头文件 GL.H, GLAUX.H, GLU.H 但没有 GLUT 软件包/工具包 如果想使用glut.h的话必须自己添加. 首先下载 OpenGL开发库, ...
- windows下图形学视觉基本库安装不完全指南
安装各种库东奔西走...... GLUT(英文全写:OpenGL Utility Toolkit)是一个处理OpenGL程式的工具库,负责处理和底层操作系统的呼叫以及I/O,并包括了以下常见的功能: ...
随机推荐
- Haskell语法
http://www.ibm.com/developerworks/cn/java/j-cb07186.html 1. 构造符号 : 比如: 1:2:3:[] 而常用的 [1,2,3] 是一种语法糖( ...
- 1022 Digital Library (30 分)
1022 Digital Library (30 分) A Digital Library contains millions of books, stored according to thei ...
- LitJson使用中的一些问题
http://blog.csdn.net/n5/article/details/45030063
- DevOps到底是什么鬼?DevOps介绍及工具推荐。
什么是DevOps DevOps是Development和Operations的组合,是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与 ...
- Warshall算法和Floyd算法
不用说这两位都是冷门算法……毕竟O(n^3)的时间复杂度算法在算法竞赛里基本算是被淘汰了……而且也没有在这个算法上继续衍生出其他的算法… 有兴趣的话:click here.. 话说学离散的时候曾经有个 ...
- robotframework+python3+selenium之创建第一个项目---第三集
1.新建一个project 选择Directory,则是文件夹 2.选择文件,创建new suite test_1 3.创建test case baidu_test 4.此时界面如图: 5. ...
- nodejs 模板引擎ejs的简单使用(2)
test.ejs <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- Ubuntu 18.04 切换使用Python3
我安装的Ubuntu 默认的python是2.7.5 python -V 我参考网上照到的文章,如果需要默认python为 python3 python命令默认是 python 3 sudo cp / ...
- 自行制作yum源仓库
背景 客户服务器为内网机器,centos7系统,且无法与外网连接.需要部署对应的LANMP环境及其它软件 解决思路 1.在阿里云服务器,利用阿里云的yum源仓库,下载对应软件及关联软件. 2.在客户机 ...
- delphi Copy函数 和 Pos函数
copy(a,b,c); a:就是copy源,就是一个字符串,表示你将要从a里copy一些东西, b:从a中的第b位开始copy(包含第1位), c:copy从第b位开始后的c个字符, 例如: m:= ...