求一个用C++写的Delaunay三角剖分间接实现Voronoi图的代码。最好有算法说明谢谢!! 急用!!

邮箱为 wsq520748@163.com

#include<iostream>
#include<cmath>
using namespace std;
#define N 30
typedef struct //定义点的结构体
{
int x,y;
}Point;
class point
{
private:
Point *v;
public:
int distance(Point i,Point j); //计算两点的距离
int w(Point i,Point j,Point k); //计算三条边的长度之和
void minWeightTriangulation(int n,int t[][N],int s[][N]); //用动态规划计算最优值
void print(int s[][N],int i,int j); //输出
};
int point::distance(Point i,Point j)
{
int s=(i.x-j.x)*(i.x-j.x)+(i.y-i.y)*(i.y-i.y);
return sqrt(s);
}
int point::w(Point i,Point j,Point k)
{
return distance(i,j)+distance(j,k)+distance(i,k);
}
void point::minWeightTriangulation(int n,int t[][N],int s[][N]) //用动态规划计算最优值
{
int i=0;
int r=0;
int k=0;
for(i=1;i<=n;i++) t[i][i]=0;
for(r=2;r<=n;r++)
for(i=1;i<=n-r+1;i++)
{
int j=i+r-1;
t[i][j]=t[i+1][j]+w(v[i-1],v[i],v[j]);
s[i][j]=i;
for(k=i+1;k<j;k++)
{
int u=t[i][k]+t[k+1][j]+w(v[i-1],v[k],v[j]);
if(u<t[i][j])
{
t[i][j]=u;
s[i][j]=k;
}
}
}
}
void point::print(int s[][N],int i,int j)
{
if(i==j)
return;
print(s,i,s[i][j]);
print(s,s[i][j]+1,j);
cout<<"三角行:v"<<i-1<<"v"<<s[i][j]<<"v"<<j<<endl;
}
int main()
{
int n,i;
Point v[N]={0,0};
point triangle;
int t[N][N],s[N][N];
cout<<"输入多边形的顶点数:";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"输入第"<<i+1<<"点的坐标:";
cin>>v[i].x>>v[i].y;
}
triangle.minWeightTriangulation(n,t,s);
triangle.print(s,1,n);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-04
哈哈,刚好做了这道题~感情你也是学测量的?
荷兰气候学家A•H•Thiessen提出了一种根据离散分布的气象站的降雨量来计算平均降雨量的方法,即将所有相邻气象站连成三角形,作这些三角形各边的垂直平分线,于是每个气象站周围的若干垂直平分线便围成一个多边形。用这个多边形内所包含的一个唯一气象站的降雨强度来表示这个多边形区域内的降雨强度,并称这个多边形为泰森多边形。如图5-6-1,其中虚线构成的多边形就是泰森多边形。泰森多边形每个顶点是每个三角形的外接圆圆心。泰森多边形也称为Voronoi图,或dirichlet图。

图5-6-1 泰森多边形
泰森多边形的特性是:
1、每个泰森多边形内仅含有一个离散点数据;
2、泰森多边形内的点到相应离散点的距离最近;
3、位于泰森多边形边上的点到其两边的离散点的距离相等。
泰森多边形可用于定性分析、统计分析、邻近分析等。例如,可以用离散点的性质来描述泰森多边形区域的性质;可用离散点的数据来计算泰森多边形区域的数据;判断一个离散点与其它哪些离散点相邻时,可根据泰森多边形直接得出,且若泰森多边形是n边形,则就与n个离散点相邻;当某一数据点落入某一泰森多边形中时,它与相应的离散点最邻近,无需计算距离。
在泰森多边形的构建中,首先要将离散点构成三角网。这种三角网称为Delaunay三角网。
对于泰森多边形(即Delaunay三角网)内的Delaunay三角形的构建方法应为:
1、凸包生成;
2、环切边界法凸包三角剖分;
3、离散点内插。
Delaunay三角形产生准则的最简明的形式是:任何一个Delaunay三角形的外接圆的内部不能包含其它任何点。它的最大化最小角原则是:每两个相邻的三角形构成的凸四边形的对角线,在相互交换后,六个内角的最小角不再增大。
而泰森多边形(即Delaunay三角网)的构建步骤应为:
1、离散点自动构建三角网,即构建Delaunay三角网。对离散点和形成的三角形编号,记录每个三角形是由哪三个离散点构成的。
2、找出与每个离散点相邻的所有三角形的编号,并记录下来。这只要在已构建的三角网中找出具有一个相同顶点的所有三角形即可。

图5-6-6 泰森多边形的建立
3、对与每个离散点相邻的三角形按顺时针或逆时针方向排序,以便下一步连接生成泰森多边形。排序的方法可如图5-6-6所示。设离散点为o。找出以o为顶点的一个三角形,设为A;取三角形A除o以外的另一顶点,设为a,则另一个顶点也可找出,即为f;则下一个三角形必然是以of为边的,即为三角形F;三角形F的另一顶点为e,则下一三角形是以oe为边的;如此重复进行,直到回到oa边。
4、计算每个三角形的外接圆圆心,并记录之。
5、根据每个离散点的相邻三角形,连接这些相邻三角形的外接圆圆心,即得到泰森多边形。对于三角网边缘的泰森多边形,可作垂直平分线与图廓相交,与图廓一起构成泰森多边形。
怎么只能插入一张图片啊.......晕.......追问

有没有源代码呢

追答

你不是要算法说明吗 源码没用

第2个回答  2012-04-21
哇 那是神马

...间接实现Voronoi图的代码。最好有算法说明谢谢!! 急用!!
cout<<"输入第"<<i+1<<"点的坐标:";cin>>v[i].x>>v[i].y;} triangle.minWeightTriangulation(n,t,s);triangle.print(s,1,n);return 0;}

计算几何第五周:完美三角剖分(Delaunay Triangulation)
Delaunay三角剖分定义为:在一个平面点集中,任意三角形的外接圆中不应包含其他点。这种剖分确保了每个点周围三角形的对称性。Delaunay剖分与Voronoi图之间存在对偶关系,Voronoi图中的每个顶点对应Delaunay图中的一个三角形。Voronoi图的构建复杂度为O(nlogn),而Delaunay图的复杂度也是O(nlogn)。在Delauna...

Delaunay三角剖分理论及可视化应用研究内容简介
本书全面介绍了Delaunay三角剖分及其对偶图——Voronoi图的相关技术,通过灵活性更好的带权Delaunay三角\/四面体剖分解决限定三角剖分问题,得到的三角网格与Delaunay三角网格具有相似的优良性质。建立了三角形\/四面体的质量评价体系,并给出了质量控制算法。本书深入研究和分析了计算几何中影响算法健壮性的因素...

点集的Delaunay三角剖分方法
Delaunay三角剖分方法是目前最流行的通用的全自动网格生成方法之一。比较有效的Delaunay三角剖分算法有分治算法、逐点插入法和三角网生长法等(Tsai,1993),其中逐点插入法由于其算法的简洁性且易于实现,因而获得广泛的应用。其主要思路是先构建一个包含点集或区域的初始网格,再依次向初始网格中插入点,最后形成Delaunay三角...

计算几何第五周:完美三角剖分(Delaunay Triangulation)
Delaunay三角剖分的定义独特,其核心是确保每个三角形的外接圆都不包含空间中的任何点。这个结构与Voronoi图有着紧密的联系,它具备空圆性,保证了边由空圆连接;最近邻性则构成了有向图NNG,且在二维空间中,其复杂度仅线性增长。然而,随着维度的提升,复杂度的增加让这个概念显得更为微妙。Gabriel ...

区域的Delaunay三角剖分
区域的Delaunay三角剖分方法可以概括为3个步骤:第一步:布点并离散边界,将剖分对象从区域转换为点集。根据剖分规模或想要得到的三角形单元的大概边长,向区域内插入一系列的内部点,并将内外边界离散成一系列的小线段。图3.14(a)为某剖分区域,图3.14(b)为向区域内布点的结果,图3.14(c)则时在...

Delaunay三角剖分算法的定义
在实际中运用的最多的三角剖分是Delaunay三角剖分,它是一种特殊的三角剖分。先从Delaunay边说起:【定义】Delaunay边:假设E中的一条边e(两个端点为a,b),e若满足下列条件,则称之为Delaunay边:存在一个圆经过a,b两点,圆内(注意是圆内,圆上最多三点共圆)不含点集V中任何其他的点,这一...

Delaunay三角剖分算法的介绍
点集的三角剖分(Triangulation),对数值分析(比如有限元分析)以及图形学来说,都是极为重要的一项预处理技术。尤其是Delaunay三角剖分,由于其独特性,关于点集的很多种几何图都和Delaunay三角剖分相关,如Voronoi图,EMST树,Gabriel图等。Delaunay三角剖分有最大化最小角,“最接近于规则化的“的三角...

voronoi图的构造方法
但利用Delaunay三角剖分生成Voronoi图的算法是最快的。但最快的方法则是构造Delaunay三角剖分,再连接相邻三角形的外接圆圆心,即可以到Voronoi图。 对于给定的初始点集P,有多种三角网剖分方式,其中Delaunay三角网具有以下特征:1、Delaunay三角网是唯一的;2、三角网的外边界构成了点集P的凸多边形“外壳...

Delaunay三角剖分理论及可视化应用研究图书目录
拾取),以及框架平台的总体结构。本书附录部分包括计算带权四面体的正交球的球心和半径、局部加权Delaunay测试以及Jacobi方法求矩阵的特征向量和特征值的详细算法与理论。《Delaunay三角剖分理论及可视化应用研究》旨在为读者提供深入理解Delaunay三角剖分理论、可视化应用及其在科学计算中的实际应用的完整指南。

相似回答
大家正在搜