POJ3608(旋转卡壳求两个多边形最短距离)

POJ 3608 Bridge Across Islands(旋转卡壳求凸多边形最短距离) http://poj.org/problem?id=3608 大意:求解两个凸多边形的最短距离。 分析:依然是旋转卡壳来解决。用一对平行支撑线围绕两个凸多边形来寻找最短的距离。 计算P多边形y最小的端点和y最大的端点,即ymin,ymax 通过ymin,ymax构造两条支撑射线LP和LQ,方向相反。两个ymin,ymax的端点的距离作为所求距离的初始值,然后旋转两条支撑线。 阅读详情

不是特别会搞这个问题,大致思想跟凸包内部求最远点对类似。先抄一发留作模板233

#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string.h>
#include<iostream>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<iomanip>
using namespace std;

const double pi=acos(-1.0);
#define ll long long
#define pb push_back

#define sqr(a) ((a)*(a))
#define dis(a,b) sqrt(sqr(a.x-b.x)+sqr(a.y-b.y))

const double eps=1e-10;
const int maxn=5e4+56;
const int inf=0x3f3f3f3f;

struct Point{
    double x,y;
    Point(){}
    Point(double x,double y):x(x),y(y){}
    Point operator -(const Point &p){return Point(x-p.x,y-p.y);}
    bool operator<(const Point &a)const{
         if(x!=a.x)return x<a.x;
         else return y<a.y;
    }
    double dot(const Point&p){return x*p.x+y*p.y;}
    double det(const Point&p){return x*p.y-y*p.x;}
};
Point P[maxn],Q[maxn];

//AB与AC的叉积,正表示C在向量AB的逆时针方向
double cross(Point A,Point B,Point C){
    return (B-A).det(C-A);
}
//AB与AC的点积,0则垂直
double multi(Point A,Point B,Point C){
    return (B-A).dot(C-A);
}

void anticlockwise_sort(Point *p,int N){
    for(int i=0;i<N-2;i++){
        double tmp=cross(p[i],p[i+1],p[i+2]);
        if(tmp>eps)return;
        else if(tmp<-eps){
            reverse(p,p+N);return;
        }
    }
}

//C到线段AB的距离
double point_to_line(Point A,Point B,Point C){
    if(dis(A,B)<eps)return dis(B,C);
    if(multi(A,B,C)<-eps)return dis(A,C);
    if(multi(B,A,C)<-eps)return dis(B,C);
    return fabs(cross(A,B,C)/dis(A,B)); //面积
}
//两线段AB到CD的距离
double line_to_line(Point A,Point B,Point C,Point D){
    return min(min(point_to_line(A,B,C),point_to_line(A,B,D)),//四种可能
                min(point_to_line(C,D,A),point_to_line(C,D,B))
            );
}
//两凸包求距
//
double solve(Point *P,Point *Q,int n,int m){
    int yminP=0,ymaxQ=0;
    for(int i=0;i<n;i++)if(P[i].y<P[yminP].y)yminP=i;
    for(int i=0;i<m;i++)if(Q[i].y>Q[ymaxQ].y)ymaxQ=i;
    P[n]=P[0];Q[m]=Q[0];
    double arg,ans=inf;
    for(int i=0;i<n;i++){   //枚举p上的点
        while(arg=(cross(P[yminP+1],Q[ymaxQ+1],P[yminP]) - cross(P[yminP+1],Q[ymaxQ],P[yminP]))>eps){
            ymaxQ=(ymaxQ+1)%m;
        }
        ans=min(ans,line_to_line(P[yminP],P[yminP+1],Q[ymaxQ],Q[ymaxQ+1]));
        yminP=(yminP+1)%n;
    }
    return ans;
}

int main(){
    int N,M;
    while(~scanf("%d%d",&N,&M)&&N){
        for(int i=0;i<N;i++){
            scanf("%lf%lf",&P[i].x,&P[i].y);
        }
        for(int i=0;i<M;i++){
            scanf("%lf%lf",&Q[i].x,&Q[i].y);
        }
        anticlockwise_sort(P,N);anticlockwise_sort(Q,M);
        printf("%.5lf\n",solve(P,Q,N,M));
    }

    return 0;
}
两个多边形之间的最小距离:计算两个不同形状的多边形之间的最小距离。 (顶点-顶点情况)-matlab开发 此函数计算两个多边形 P1 和 P2 之间的最小欧氏距离。 - 顶点-顶点情况 立即下载

相关推荐

学习凸包(三):凸包练习 POJ 1113

NULL 博文链接:https://128kj.iteye.com/blog/1748635

poj3608(旋转卡壳求两凸包间的最短距离)

/* translation: 求两个凸包间的最小距离? solution: 旋转卡壳法。 note: * 网上给出的资料都差不多,具体如下: 1. 计算凸包P在y轴方向上的最小值记为yminP,和凸包Q在y轴方向上的最大值记为ymaxQ。 2. 建立两条紧贴着yminP, ymaxQ的两条水平的直线LP, LQ。要求他们指向不同的方向。这时候他们就形成了一对anti-podal pai

林伏案的博客 731

视觉检测在激光打码字符检测上的检测案例

在机器视觉检测技术中,OCR识别是比较典型的应用,应用的场景也比较丰富,基本上在制造业,每个工厂或者印刷厂都会用到视觉OCR识别检测,OCR字符识别的原理很简单,通过图像分割后,对字符进行学习、命名。在工业相机拍摄图像后,软件进行处理,从而读取结果。 随着技术的发展,激光打标技术被更多的应用在生产过程中,由激光打标代替油墨进行字符印刷,速度更快、效果更好。 但是随之而来的是在视觉检测上带来的影响,目前市面上应用的字符检测设备大多是由集成商单独开发的软件,在检测油墨印刷时,图像上的字符没有断点,非常连贯,所需

视觉检测设备-视觉检测系统-单张检测设备-卷料印品检测 1462

poj 3608 Bridge Across Islands 旋转卡壳(两个凸包的最近距离)

代码:

冷月之殇 865

ES8311音频Codec避坑指南:从I2C通信、电平匹配到回环测试的保姆级调试笔记

本文详细解析了ES8311音频编解码芯片的调试全流程,涵盖I2C通信建立、电平匹配、主从模式配置等关键环节。通过真实案例和实用技巧,帮助工程师快速定位和解决音频Codec常见问题,提升硬件调试效率。特别针对回环测试、功耗分析等高频故障点提供了可复用的排查方法论。

weixin_42532938的博客 275

本地部署大模型框架 LMStudio和Ollama+WebUI对比

之前我们的辣妈系列文章介绍了很多如何使用Ollama框架+OpenWebUI做很多大模型框架下相关的事情。之后我们也尝试了LMStudio这样一体化的工具。本文介绍下LMStudio 和 Ollama+Web UI 各有优劣,具体选择取决于你的需求。

ms44的专栏 4028

旋转卡壳——凸多边形间最小距离

凸多边形间最小距离给定两个非连接(比如不相交)的凸多边形 P 和 Q, 目标是找到拥有最小距离的点对 (p,q) (p 属于 P 且 q 属于 Q)。 事实上, 多边形非连接十分重要, 因为我们所说的多边形包含其内部。 如果多边形相交, 那么最小距离就变得没有意义了。 然而, 这个问题的另一个版本, 凸多边形顶点对间最小距离对于相交和非相交的情况都有解存在。 回到我们的主问题: 直观的, 确定最小

ACMaker的专栏 7663

从零构建个性化AI助手:基于Mem0与本地大模型的记忆化实践

本文详细介绍了如何利用Mem0与本地大模型构建个性化AI助手,实现记忆化应用结构的实践方法。从开发环境搭建、记忆存储机制到个性化交互实现,提供了完整的解决方案和代码示例,帮助开发者在本地环境中创建能记住用户习惯和偏好的智能助手。

weixin_29214335的博客 464

poj3608_Bridge Across Islands_旋转卡壳&&点到线段的距离

题意给出两个凸包,现要用一条线段连接这两个凸包,求这条线段的最小长度。思路从第一个凸包y值最小的那个点,和第二个凸包y值最大的那个点出发,旋转卡壳。链接http://poj.org/problem?id=3608代码#include<cstdio> #include<algorithm> #include<cmath>using namespace std;const double eps = 1e

弱的奋斗之旅 238

uni-app蓝牙MTU设置失效探因:从20字节限制到跨设备兼容性实战

本文深入探讨了uni-app蓝牙开发中MTU设置失效的常见问题,特别是20字节限制的成因及解决方案。通过分析设备兼容性、蓝牙协议栈特性和系统版本差异,提供了智能延迟策略、设备特征检测和渐进式MTU提升等实战方案,帮助开发者优化蓝牙数据传输效率。

weixin_29289821的博客 288

解锁激光加工密码:功率、频率、脉宽、占空比全解析

激光加工利用高能量激光束实现材料加工,具有无接触、高效率等特点。其核心参数包括功率(决定能量输出)、频率(控制脉冲重复)、脉宽(调节能量作用时间)和占空比(调控工作周期),这些参数相互协同影响加工效果。针对不同材料需采用差异化参数组合:金属材料需较高功率,塑料需低功率防过热,陶瓷需高频短脉宽减少热应力。实际操作中应通过小范围测试逐步优化参数,并注意解决烧损、切割不平整等常见问题。合理调节这些参数可实现高质量、高效率的激光加工。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 615

poj3608(两凸包间最小距离->旋转卡壳)

这题算法十分诡异。。只是抄了个板子还是不能够很好地理解。。tm都不敢说是原创的了。。。 这个是取了A凸包的最低点和B凸包的最高点,作用。。。个人感觉就是保证第一次找的时候是最近点,以便后续进行下去。。然后在A凸包上找点,在B凸包上找边,枚举边,然后在A凸包逆时针找最近点。。由于B凸包边的枚举顺序也是逆时针,所以可以分开枚举。。然后复杂度就降到O(n)了。。 更具体的可以去百度。。毕竟窝也挺迷的

qkoqhh 599

【毕设救星】从0到1打造YOLOv8货架商品检测与可视化系统,让你的毕设脱颖而出

本文介绍了一个基于YOLOv8的货架商品检测系统毕设项目。系统采用YOLOv8模型进行商品检测,包含环境搭建、数据集准备、模型训练与验证等完整流程,并开发了可视化UI界面。项目聚焦智能零售应用场景,技术栈完整且易于实现,适合作为计算机视觉方向的毕业设计。文章详细指导了从数据标注、模型训练到界面开发的全过程,提供代码示例和实用建议,帮助学生快速完成毕设并提升答辩表现。

LXY_LOVE36的博客 103

旋转卡壳入门二之 POJ 3608

POJ 3608 Bridge Across Islands 题目链接 Thousands of thousands years ago there was a small kingdom located in the middle of the Pacific Ocean. The territory of the kingdom consists two separated islands...

永不止步的博客 491

【施磊】C++课程笔记目录

【C++编程】施磊老师C++笔记目录

GeniusAng的博客 4122

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

poj 3608 Bridge Across Islands(卡壳旋转求两个多边形的最近点对)

Bridge Across Islands Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7672   Accepted: 2275   Special Judge Description Thousands of thousands years ago

街角的花街糖 972

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

poj3608-旋转卡壳

题目链接:http://poj.org/problem?id=3608 DescriptionThousands of thousands years ago there was a small kingdom located in the middle of the Pacific Ocean. The territory of the kingdom cons...

测试 375

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【POJ3608】Bridge Across Islands(旋转卡壳求两凸多边形的最短间距)

题目地址:http://poj.org/problem?id=3608 解题思路: 注意:给出的点是按顺时针的,如果不是的话需要按照顺时针/逆时针排序 贴一下网上比较流行的原理解释: 1. 计算凸包P在y轴方向上的最小值记为yminP,和凸包Q在y轴方向上的最大值记为ymaxQ。 2. 建立两条紧贴着yminP, ymaxQ的两条水平的直线LP, LQ。要求他们指向不同的...

Cassie_zkq的博客 630

poj 3608 Bridge Across Islands(旋转卡壳求凸包最短距离)

Bridge Across Islands Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9843   Accepted: 2886   Special Judge Description Thousands of thousands years ago th

lovemejj的博客 479

poj 3608 Bridge Across Islands(两个凸包的最短距离)

Bridge Across Islands Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6165   Accepted: 1731   Special Judge Description Thousands of thousands years ago th

志当存高远 971

POJ 3608 Bridge Across Islands(两个凸包最近距离,旋转卡壳)

转载请注明出处,谢谢 http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents           by---cxlove 题目:两个不相交的多边形,求最近距离。 http://poj.org/problem?id=3608 这里有详细的讲解:http://cgm.cs.mcgill.ca/~orm/mind2p.html 这是找到第一个凸包的

窝不是爱酱,喵~~~~ 2130

poj3608Bridge Across Islands【旋转卡壳】

Language: Default Bridge Across Islands Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9249   Accepted: 2731   Special Judge Description Thousands of

走一步再走一步 1094

2021-07-14-Bridge Across Islands POJ - 3608(旋转卡壳+凸多边形间最短距离)

传送门 题意: 给定两个顶点数分别为 N, M 的凸多边形 A, B,保证 A, B 不相交。 求它们的最短距离,即求 mindist(u,v)∣u∈A,v∈Bmin{ dist( u, v ) } | u∈A, v∈Bmindist(u,v)∣u∈A,v∈B。 3≤N,M≤100003 ≤ N, M ≤ 100003≤N,M≤10000 两个多边形均按顺或者逆时针输入 多组输入,每行输出一个数字表示最小距离(保留五位小数) 题解: 旋转卡壳的核心问题:怎么卡? 其实我也每太看懂,先记住吧 代码:

I_have_a_world的博客 334

POJ 3608 Bridge Across Islands (凸包+旋转卡壳)

DescriptionThousands of thousands years ago there was a small kingdom located in the middle of the Pacific Ocean. The territory of the kingdom consists two separated islands. Due to the impact of the o

Ab.Ever 696

poj 3608 两凸包最近点,旋转卡壳

http://poj.org/problem?id=3608 给定两个非连接(比如不相交)的凸多边形 P 和 Q, 目标是找到拥有最小距离的点对 (p,q) (p 属于 P 且 q 属于 Q)。 事实上, 多边形非连接十分重要, 因为我们所说的多边形包含其内部。 如果多边形相交, 那么最小距离就变得没有意义了。 然而, 这个问题的另一个版本, 凸多边形顶点对间最小距离对于相交和非相交...

dinglangwei5539的博客 143

POJ3608

这题真神了,同样的代码用G++就WA用C++就AC…… 题意是说,给两个

sysuyudx的专栏 510
上一篇: 旋转卡壳算法
下一篇: POJ2318&&POJ2398
HumveeA6
博客等级 码龄17年 12粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值