旋转卡壳模板
2016-01-28 13:32
218 查看
void CirAndCut(Point psn[],int n,Point psm[],int m)
{
int nid=0,mid=0;
for(int i=1;i<n;i++)
if(psn[i].y>psn[nid].y)
{
nid=i;
}
for(int i=1;i<m;i++)
if(psm[i].y<psm[mid].y)
{
mid=i;
}
//找到点集n中最上点,m中的最下点。
//l 为水平向右的向量
for(int ii=0;ii<n+m;ii++)
{
//第一步判断谁先 滚起来
Point nextn,nextm;
nextn = psn[(nid+1)%n];
nextm = psm[(mid+1)%m];
if( (nextn-psn[nid])*(psm[mid]-nextm)>0 )
{
//n先滚
nid = (nid+1)%n;
}
else
{
mid= (mid+1)%m;
}
//这里就可以得到对踵点
/*
Line l1,l2;
l1.p1 = psn[nid];
l1.p2 = psn[ (nid-1+n)%n ];
l2.p1 = psm[mid];
l2.p2 = psm[ (mid-1+m)%m ];
ans = min(ans,Dis(l1, l2));
*/
}
}
{
int nid=0,mid=0;
for(int i=1;i<n;i++)
if(psn[i].y>psn[nid].y)
{
nid=i;
}
for(int i=1;i<m;i++)
if(psm[i].y<psm[mid].y)
{
mid=i;
}
//找到点集n中最上点,m中的最下点。
//l 为水平向右的向量
for(int ii=0;ii<n+m;ii++)
{
//第一步判断谁先 滚起来
Point nextn,nextm;
nextn = psn[(nid+1)%n];
nextm = psm[(mid+1)%m];
if( (nextn-psn[nid])*(psm[mid]-nextm)>0 )
{
//n先滚
nid = (nid+1)%n;
}
else
{
mid= (mid+1)%m;
}
//这里就可以得到对踵点
/*
Line l1,l2;
l1.p1 = psn[nid];
l1.p2 = psn[ (nid-1+n)%n ];
l2.p1 = psm[mid];
l2.p2 = psm[ (mid-1+m)%m ];
ans = min(ans,Dis(l1, l2));
*/
}
}
相关文章推荐
- effective java 读书笔记(五)
- file_get_contents & curl mark一下
- Java 定时任务
- 旋转卡壳求两个凸包最近距离poj3608
- delphi 获取当前进程的cpu占用率
- hdu 2822(BFS+优先队列)
- mysql 用source 导入数据库报错
- RMQ问题
- 快速搭建大数据分析虚拟机
- ExecutorService 线程池
- iOS 菜单显示一种方式
- PVLAN
- android Bitmap 处理
- Eclipse搭建Maven工程集成Spring4+Hibernate5
- FILE文件流的中fopen、fread、fseek、fclose的使用
- 热部署原理和实例
- Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
- RxAndroid基本使用1
- 获取系统版本
- Bitmap image and image mask 位图 图片遮罩