安装 QT 4.6.3
1.安装MinGW,C:\MinGW\bin添加到环境变量。
2.下载 QT 最新版本 4.6.3
http://www.qtsoftware.com/downloads/windows-cpp
3.运行 QT 的安装程序,忽视关于版本兼容性的报警信息
4.打开 Visual Studio的命令提示窗口
cd c:\QT\4.6.3
configure -platform win32-msvc2008
5.configure 完成后,输入 nmake,大概等待5个小时。
6.将 C:\Qt\4.6.3\bin添加到环境变量中
CGAL编程实现点集的Delaunay三角剖分和Voronoi图
//使用CGAL编程实现点集的Delaunay三角剖分,voronoi图
//如果对Delaunay算法本身关注,请参考CGAL对Delaunay三角剖分的实现,CGAL对Delaunay三角剖分的实现是增量算法(Incremental)
//本程序的重点在于对CGAL中Delaunay数据结构的访问,请参考函数points_triangulation()。初次使用CGAL,不妥之处请多指正,谢谢。
//SudoLeo 2010/7/20
//CGAL required, GLUT required
代码
//使用CGAL编程实现点集的Delaunay三角剖分,voronoi图
//如果对Delaunay算法本身关注,请参考CGAL对Delaunay三角剖分的实现,CGAL对Delaunay三角剖分的实现是增量算法(Incremental)
//本程序的重点在于对CGAL中Delaunay数据结构的访问,请参考函数points_triangulation()
//SudoLeo 2010/7/20
//CGAL required, GLUT required
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Triangulation_euclidean_traits_xy_3.h>
#include <CGAL/Delaunay_triangulation_2.h>
#include <GL/glut.h>
#include <iostream>
#include <cmath>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> Delaunay;
typedef Delaunay::Vertex_handle Vertex_handle;
typedef K::Point_2 Point;
std::vector<Point> vertices;
int global_w, global_h;
int tri_state = 0;
void points_draw()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
std::vector <Point>::iterator iter;
glColor3f( 1.0, 1.0, 1.0 );
glPointSize(5);
glBegin(GL_POINTS);
for( iter = vertices.begin(); iter != vertices.end(); iter++ )
glVertex2i( iter->hx(), iter->hy() );
glEnd();
glPopMatrix();
glutSwapBuffers();
}
void points_add_point( int x, int y )
{
vertices.push_back( Point( x, global_h-y ) );
}
void points_clear()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glPopMatrix();
glutSwapBuffers();
vertices.clear();
tri_state = 0;
}
void read_file()//从文件中读入点集数据,调试时所使用
{
FILE* f;
f = freopen( "data.txt", "r", stdin );
int a,b;
while(std::cin>>a >> b)
{
vertices.push_back( Point( a, b ) );
}
fclose(f);
}
void points_triangulation()
{
Delaunay dt;//Delaunay数据结构,代表当前数据的一个且仅有一个的三角剖分,详情请参考CGAL_manual
dt.insert(vertices.begin(), vertices.end());//输入数据
points_draw();//points_draw()函数中已经调用一次glutSwapBuffers(),本函数再一次调用glutSwapBuffers()
//在一帧的绘制中两次调用glutSwapBuffers(),虽对本例无影响,但存在一些问题,这不是本文的重点,可暂且忽略之
glPushMatrix();
Delaunay::Finite_faces_iterator fit;//遍历Delaunay的所有面(有限面),将每个面的边画出来
glColor3f( 0.0, 0.0, 1.0 );
for( fit = dt.finite_faces_begin(); fit != dt.finite_faces_end(); fit ++)
{
glBegin(GL_LINE_LOOP);
glVertex2i( fit->vertex(0)->point().hx(), fit->vertex(0)->point().hy() );
glVertex2i( fit->vertex(1)->point().hx(), fit->vertex(1)->point().hy() );
glVertex2i( fit->vertex(2)->point().hx(), fit->vertex(2)->point().hy() );
glEnd();
}//完成Delaunay三角剖分的绘制,Delaunay图
Delaunay::Edge_iterator eit;//遍历Delaunay的所有边,绘制Delaunay图的对偶图,即Voronoi图
glEnable( GL_LINE_STIPPLE );//使用点画模式,即使用虚线来绘制Voronoi图
glLineStipple( 1, 0x3333 );
glColor3f( 0.0, 1.0, 0.0 );
for( eit = dt.edges_begin(); eit != dt.edges_end(); eit ++)
{
CGAL::Object o = dt.dual(eit);//边eit在其对偶图中所对应的边
if (CGAL::object_cast<K::Segment_2>(&o)) //如果这条边是线段,则绘制线段
{
glBegin(GL_LINES);
glVertex2i( CGAL::object_cast<K::Segment_2>(&o)->source().hx(), CGAL::object_cast<K::Segment_2>(&o)->source().hy() );
glVertex2i( CGAL::object_cast<K::Segment_2>(&o)->target().hx(), CGAL::object_cast<K::Segment_2>(&o)->target().hy() );
glEnd();
}
else if (CGAL::object_cast<K::Ray_2>(&o))//如果这条边是射线,则绘制射线
{
glBegin(GL_LINES);
glVertex2i( CGAL::object_cast<K::Ray_2>(&o)->source().hx(), CGAL::object_cast<K::Ray_2>(&o)->source().hy() );
glVertex2i( CGAL::object_cast<K::Ray_2>(&o)->point(1).hx(), CGAL::object_cast<K::Ray_2>(&o)->point(1).hy() );
glEnd();
}
}
glDisable( GL_LINE_STIPPLE );//关闭点画模式
glPopMatrix();
glutSwapBuffers();
tri_state = 1;//完成三角剖分,置状态为1
}
void display(void)
{
}
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void reshape(int w, int h)
{
global_w = w;
global_h = h;
points_clear();
glViewport (0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, w, 0, h, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void mouse(int button, int state, int x, int y)
{
if ( button == GLUT_LEFT_BUTTON && state == GLUT_UP )
{
if( tri_state == 1 ) points_clear();
else
{
points_add_point(x,y);
//read_file();
points_draw();
}
}
if ( button == GLUT_RIGHT_BUTTON && state == GLUT_UP )
{
if( tri_state == 1 ) points_clear();
else points_triangulation();
}
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (800, 600);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
分享到:
相关推荐
刚实现的VS2008+opengl实现的Delaunay三角剖分代码,代码是C++实现
三维折剖面Delaunay三角剖分在三维地质建模和其他领域具有广泛应用。目前常用的方法是将其投影到二维平面三角剖分。该方法有三点不足:(1)违反Delaunay三角剖分优化准则;(2)悬三角形问题;(3)投影多值问题。...
基于凸多边形的Delaunay三角剖分 ,很实用的方法,希望这篇文献能够对大叫有用处!
德劳内三角测量该项目旨在用 C++ 实现增量 Delaunay 三角剖分算法。 该算法用于最大化三角剖分中所有三角形的角度的最小角度。 我们在这个项目中使用的数据结构称为“半边”数据结构,它是由石溪大学计算机科学系顾...
计算几何算法库(CGAL),提供计算几何相关的数据结构和算法,诸如三角剖分(2D约束三角剖分及二维和三维Delaunay三角剖分),Voronoi图(二维和三维的点,2D加权Voronoi图,分割Voronoi图等),多边形(布尔操作,...
计算几何算法库(CGAL),提供计算几何相关的数据结构和算法,诸如三角剖分(2D约束三角剖分及二维和三维Delaunay三角剖分),Voronoi图(二维和三维的点,2D加权Voronoi图,分割Voronoi图等),多边形(布尔操作,...
以CGAL非递归方式实现的逐点插入计算Delaunay剖分算法为基础,在剖分过程中,用关联采样点的伞局部替换原来表面中不满足Gabriel准则表面面片的集合,心内膜表面结构随着点云Delaunay剖分的变化而进行动态的更新;...
只要你的工程有VTK、CGAL5.5环境就可以使用。
delaunay_linterp可以通过维护与三角剖分的每个单纯形关联的近似误差列表,来自适应地选择在何处插入数据点。 与常规网格相比,这可以很好地近似具有很少数据点的任意函数。 dD与2D CGAL具有多个用于构造Delaunay三
一个优秀的编程图形库,本编程手册给出了专业指导
cgal编程指南,使用c++编写,方便快捷,容易迁移,很好的库文件,欢迎使用。
基于VC的Delaunay三角剖分源码,算法比较详细
Cgal编程函数库,方便图形学编程,能够为您提供方便的程序调用
本章适用于CGAL新手。学习CGAL之前,需要对C++语言、几何算法有基本的了解。第一小节将会向读者展示如何定义点和直线,以及如何把几何谓词作用在这些元素上。之后,本小节还将进一步说明使用浮点数表示坐标会引起一...
包含cgal3.8的用户手册和参考手册,极为详细。
CGAL具有广泛的数据结构和算法,包括Voronoi图,单元格复合体和多面体,三角剖分,曲线排列,表面和体积网格生成,空间搜索,alpha形状,几何处理等等。这些的使用导致美观,视觉复杂和准确的表示。 特征 算术和...
简述了通过CGAL将一个多边形剖分成Delaunay三角网的过程,并且给出了具体的实现代码。博文地址在:https://blog.csdn.net/charlee44/article/details/104932321
文件包括读取数据库解析点云,将点云三角剖分成mesh格式网格模型,基于mesh计算顶点法向量,保存为Obj模型文件。
CGAL细分约束三角剖分以及搜寻约束边界内的三角形面,poisson reconstrucion
CGAL 计算几何算法库安装文件 徐如demo样式,请留言邮箱,看到了发