最优三角剖分
来源:互联网 发布:安卓 网络修复 编辑:程序博客网 时间:2024/04/29 07:22
#include<iostream>
#include<math.h>
using namespace std;
//输入多边形的顶点(二维)序列,构造最优的三角剖分,所谓最优三角剖分是指n个顶点的凸多边形,从任何顶点向它不相邻的顶点连线
//可以构成n-2个三角形,n个顶点可以构成n(n-2)个三角形
//三角形的边上的权值是边上两个邻接点的欧式距离,找出这n(n-2)个三角形权值最小的那n-2组
const double Max=1000000;
double distance(double **p,int i,int j) //计算顶点i,j的欧式距离
{
return pow(p[i][0]-p[j][0],2)+pow(p[i][1]-p[j][1],2);
}
void OptimalTrangleDivision(double **p,int n,int& besti) //找出最优三角剖分
{
double sum; //不相邻顶点欧式距离之和
double min=Max;
int i,j;
int cnt;// 用于计数,n个顶点可以有n-3条对角线
for(i=0;i<n;i++)
{
sum=0;
for(cnt=0,j=(i+2)%n;cnt<n-3;j=(j+1)%n,cnt++)
{
sum+=distance(p,i,j);
if(sum<min)
{
min=sum;
besti=i;
}
}
}
}
void main()
{
int n;
cout<<"输入多边形的顶点数N:";
cin>>n;
double **p=new double*[2]; //多边形的顶点数组
int i;
for(i=0;i<n;i++) p[i]=new double[2];
for(i=0;i<n;i++) //顶点数组初始化
{
cout<<"输入第"<<i<<"个顶点的横坐标:";
cin>>p[i][0];
cout<<"输入第"<<i<<"个顶点的纵坐标:";
cin>>p[i][1];
}
int besti;
OptimalTrangleDivision(p,n,besti);
int j,cnt;
cout<<"最优三角剖分是:"<<endl;
for(cnt=0,j=(besti+2)%n;cnt<n-3;cnt++,j=(j+1)%n)
{
cout<<"从顶点"<<besti<<"到顶点"<<j<<endl;
}
}
- 最优三角剖分
- 最优三角剖分
- 最优三角剖分
- 凸多边形最优三角剖分
- 凸多边形最优三角剖分
- 凸多边形最优三角剖分
- 凸多边形最优三角剖分
- 凸多边形最优三角剖分
- 凸多边形最优三角剖分
- 凸多边形最优三角剖分问题
- 凸多边形的最优三角剖分问题
- dp 最优三角剖分问题
- 入门经典 最优三角剖分
- 【动态规划】凸多边形最优三角剖分
- 动态规划--凸多边形最优三角剖分
- 凸多边形最优三角剖分-动态规划
- 凸边形最优三角剖分
- zoj3537cake【最优三角剖分+凸包】
- ajax XMLHttpRequest五步使用法
- android基础学习笔记--MP3播放器开发
- Activiti came into my life today
- Why I was subjected to so much abnormal behaviour
- VB工程13--百例20--不能单击按钮
- 最优三角剖分
- Java中集合和数组的区别
- Java 线程中断
- 不同rpm 安装mysql 和手工编译之间的性能差异
- 架构师之我见
- 第九周实验报告1
- VMware让ubuntu11 与win7共享文件方法
- 第九周实验报告2
- What you need to extend as a osworkflow developer