求取点集凸包的数学原理为最简单的,在网上能够找到。
/*******************************************************************************
* 文件名称 : GeoEnvelope.h
* 当前版本 : 1.3
* 作 者 : I_am_No3
* 设计日期 : 2017年3月8日
* 内容摘要 : 离散点集的凸包轮廓
********************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define MaxNode 1000
int stack[MaxNode];
int top=0;
int last=0;
typedef struct POINT
{
int x;
int y;
}POINT;
POINT point[MaxNode];
POINT pointout[MaxNode];
void swap(POINT point[],int i,int j)
{
POINT tmp;
tmp=point[i];
point[i]=point[j];
point[j]=tmp;
}
double multi(POINT p1,POINT p2,POINT p0) //叉乘
{
return ((p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x));
}
double distence(POINT p1,POINT p2) //p1,p2的距离
{
//return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
return sqrt