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

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

#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=1i<=ni++) t[i][i]=0

for(r=2r<=nr++)

for(i=1i<=n-r+1i++)

{

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+1k<jk++)

{

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=0i<ni++)

{

cout<<"输入第"<<i+1<<"点的坐标:"

cin>>v[i].x>>v[i].y

}

triangle.minWeightTriangulation(n,t,s)

triangle.print(s,1,n)

return 0

}

安装 QT 4.6.3

1.安装MinGW,C:\MinGW\bin添加到环境变量

2.下载 QT 最新版本 4.6.3

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添加到环境变量中


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11305159.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存