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镂垫的更多相关文章

  1. 配置VC++2010的glut库

    VC++2010是一个成熟稳定的版本,微软的编译工具Visual Studio系列从VC6到如今的VC2019,功能非常强大,我们在开始学习C++和计算机图形学的时候,一般入手<<C++P ...

  2. OpenGL学习之windows下安装opengl的glut库

    OpenGL学习之windows下安装opengl的glut库 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装.  Windows环境下的GLUT下载地址:(大小约为15 ...

  3. Windows平台下Qt中glut库的使用

    用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符 ...

  4. 【转】Qt下使用glut库

    ps:这个说的很明白,尤其是win10环境下用mingw环境时编程时碰到的问题, 1.加 windows.h 2.在.pro 添加libs     博文地址:Qt下使用glut库   本人使用的环境 ...

  5. Qt工程使用第三方库——Qt下使用glut库

    本人使用的环境 操作系统:windows10 Qt构建套件:qt-mingw4.8.5 + mingw4.4.0 Qt Creator版本:3.6.1   本教程配置针对工程而言,每个工程需要单独配置 ...

  6. QT中使用Glut库

    用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符 ...

  7. linux 下使用opengl的glut库显示和旋转BMP图片

    效果图: 这里显示的图和原图有明显的色差,目前猜测是opengl渲染时的颜色表顺序跟BMP文件里的颜色表顺序相反导致. BMP里应该是BGRBGRBRG... ,而opengl渲染时应该是按照RGBR ...

  8. 计算机图形学——OpenGL开发库开发库

    vc++6.0 有 OpenGL 的东西.有头文件 GL.H, GLAUX.H, GLU.H 但没有 GLUT 软件包/工具包 如果想使用glut.h的话必须自己添加. 首先下载 OpenGL开发库, ...

  9. windows下图形学视觉基本库安装不完全指南

    安装各种库东奔西走...... GLUT(英文全写:OpenGL Utility Toolkit)是一个处理OpenGL程式的工具库,负责处理和底层操作系统的呼叫以及I/O,并包括了以下常见的功能: ...

随机推荐

  1. msf反弹shell

    今天回顾了一下msf反弹shell的操作,在这里做一下记录和分享.( ̄︶ ̄)↗ 反弹shell的两种方法 第一种Msfvenom实例: 1.msfconsole #启动msf 2.msfvenom - ...

  2. HTML中列表中元素居中问题

    想让列表<table>中某一行元素居中的话,单纯使用<align  = 'center'>是达不到效果的,需要先将该行进行合并,使用colspan属性. <html> ...

  3. Flyway - Version control for your database

    Flyway 是什么? Flyway是个数据库版本管理工具.在开发过程中,数据库难免发生变更,例如数据变更,表结构变更.新建表或者视图等等. 在项目进行时无法保证一旦开发环境中的数据库内容变化候会去测 ...

  4. python_django_template模块

    官方文档 博文导航: 定义模板:   变量 标签: if for include url csrf_token 过滤器: 简单过滤器 HTML转义 加减乘除的过滤器 注释: 模板继承 模板语言:Dja ...

  5. python 获取年月日时分秒 获取当前时间 datetime函数

    import datetime#取当前时间print(datetime.datetime.now())#取年print(datetime.datetime.now().year)#取月print(da ...

  6. 安装监控MongoDB的Python安装包时候报错:HTTP Error 403: SSL is required

    安装pymongo-2.3.tar.gz,执行命令python setup.py install报错: HTTP Error 403: SSL is required 分析原因:安装需要下载这个dis ...

  7. 使用babel转码器,让浏览器支持es6语法

    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,可是很多浏览器并不支持es6语法,所以我们需要一个转码工具, 把es6的语法转换成浏览器支持的javascr ...

  8. GlobalExceptionHandler 捕获抛出的异常,返回特定值给前端

    /** * @author hhh * @date 2019/1/17 16:28 * @Despriction */ @ResponseBody @ControllerAdvice @Log4j2 ...

  9. php注册 及审核练习

    1.注册界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  10. Optimal Marks SPOJ - OPTM

    传送门 一个无向图,每个点有点权,某些点点权确定了,某些点由你来确定,边权为两个点的异或和,要使边权和最小. 这不是一道按位做最小割的大水题么 非常开心地打了,还非常开心地以为有spj,然后非常开心地 ...