凸包

article/2025/7/5 8:55:46

一、引言

凸包(Convex Hull)是一个计算几何(图形学)中的概念。

在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,...Xn)的凸组合来构造。

通俗来说,如果给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集合中所有的点。

下图中外部的5个点就组成了这个点集的一个凸包

可以了解到凸包的一些性质:

1、它包围了点集中所有的点

2、它是凸多边形

二、凸包的求法

介绍一种容易实现的Graham扫描算法。

首先,将所有点按x坐标从小到大排序,对于x相同的,按照y从小到大排序。根据几何知识,排序后第一个点和最后一个点一定是凸包上的点。于是可以根据这两个点将这个凸包分成两部分来求解,分别为上下两条链。求下侧链时,只需将点从小到大逐个加入凸包中并进行检查,每加入一个点后都需要向前验证凸性是否存在(比如上图中的情况);当遍历过所有的点时,既下侧链已完成,然后求上侧链,从最后一个点从大到小逐个加入凸包并验证凸性,注意在求上侧链时,就与下侧链无关,因此可以当成两个独立的链来求解。

分析这个过程中可能出现的难点,就是如何验证凸性,当添加一个新点时,只用判断新点在上条线的左侧还是右侧,无论哪条链,只有新点在左侧时,才满足凸性。如下图这种情况,当新加入点P时,P在向量AB的右侧(从A看向B,既用向量分析),因此不再满足凸性,所以B点一定在凸包内,将B点删去,继续向前判断,可以发现A也不在凸包上,将A点删去,一直向前判断,直到满足凸性为止。

因此判断凸性这个问题就变成了如何判断一个点在一个向量的左侧还是右侧。

可以利用向量的叉积,回忆向量的叉积, 使用右手定则判断叉积结果的正负,右手定则可以和P点与\underset{AB}{\rightarrow}的位置关系结合起来,可以自己画图尝试一下。对于上图,做\underset{BA}{\rightarrow}\underset{PB}{\rightarrow},如果\underset{BA}{\rightarrow}\times\underset{PB}{\rightarrow}结果小于0,那么P就在\underset{AB}{\rightarrow}的右侧,如果结果大于0,那么P就在左侧,既符合凸性,如果等于0,P就在\underset{AB}{\rightarrow}方向上。 (判断叉积正负时,有公式 x_{1}y_{2}-x_{2}y_{1} )

//定义 点 的类型
typedef struct{double x, y;
}Point;
//计算两个向量叉积
//第一个向量起点a1,终点b1
//第二个向量起点a2,终点b2
double cross(Point a1, Point b1, Point a2, Point b2)
{double x1=b1.x-a1.x;double x2=b2.x-a2.x;double y1=b1.y-a1.y;double y2=b2.y-a2.y;return x1*y2-x2*y1;
}
//求点集p的凸包,函数返回值为这个凸包的点集
vector<Point> convex_hull(vector<Point> p, int n)
{sort(p.begin(), p.end(), cmp_x);   //按所定的规则给点排序int k=0;         //凸包中点的个数vector<Point> q(2*n);int i, t;//求下侧链for (i=0; i<n; i++)    //n个点遍历加入凸包并判断凸性{while (k>1 && cross(q[k-1], q[k-2], p[i], q[k-1])<=0)k--;         //如果叉积小于等于0,凸包中最新的点出栈q[k++]=p[i];}//求上侧链for (i=n-2, t=k; i>=0; i--){while (k>t && cross(q[k-1], q[k-2], p[i], q[k-1])<=0)k--;q[k++]=p[i];}q.resize(k-1);  //重设凸包大小return q;
}
//排序的依据
bool cmp_x(Point a, Point b)
{if (a.x!=b.x)return a.x<b.x;return a.y<b.y;
}

 

poj 2187  Beauty Contest

平面上有N个牧场。i号牧场位置为(xi, yi),所有牧场位置不相同。请计算距离最远的两个牧场的距离,输出最远距离的平方。

( 2<=N<=50000         -10000<=xi, yi<=10000 )

首先分析这个题,N的数量很大,如果枚举所有距离找出最大的显然会超时。那么通过分析,最远距离的两个点必定是凸包上的点,因此,只用求出这个点集的凸包,枚举凸包中所有点的距离,就可以在规定时间内完成。

int main()
{int n;scanf("%d", &n);vector<Point> p;int i, j;for (i=0; i<n; i++){Point t;scanf("%lf%lf", &t.x, &t.y);p.push_back(t);}vector<Point> q=convex_hull(p, n);    //求凸包double res=0;//枚举凸包中最大距离for (i=0; i<q.size(); i++)      for (j=i+1; j<q.size(); j++){res=max(res, dist(q[i], q[j]));}printf("%.0f\n", res);return 0;
}
//求距离的平方
double dist(Point p, Point q)
{return (q.x-p.x)*(q.x-p.x)+(q.y-p.y)*(q.y-p.y);
}

 


http://chatgpt.dhexx.cn/article/htnr3sJv.shtml

相关文章

凸包, 概念

catalog 凸包算法1 O(n * m)算法2 O(n * logN) Andrew安德鲁算法凸包模板 凸包 通常上讲 平面上有很多的点, 用一个 皮筋 圈住 这所有的点, 此时这个 皮筋, 就是 这些点的 凸包 数学上讲 性质1: 凸包上, 任何一条边 他所在的直线 即为L, 则所有的点 都在直线L 的 同一侧 比…

小白兔视频格式转换器下载

1、小白兔视频格式转换器 www.xxxbbbttt.com 上传你的视频&#xff08;腾讯qlv&#xff0c;爱奇艺qsv、优酷kux&#xff09;都可以。 2、点击转换按钮&#xff0c;转换好后&#xff0c;我们把转换的视频下载到电脑里&#xff0c;就可以看到视频已经是MP4格式了。

推荐一款能够将爱奇艺qsv、腾讯qlv、优酷kux完美转换成mp4的三合一全能格式转换器

爱奇艺视频、腾讯视频、优酷视频相信很多人都在使用其中的一款或者几款软件吧&#xff0c;这三大视频网站已经主导国内视频行业&#xff0c;都是购买视频版权。因此&#xff0c;为了保护视频版权&#xff0c;就将缓存视频的格式设置成专属的qsv、qlv、kux&#xff0c;这三种视频…

kux格式怎么转换成mp4?简单快速的视频转换技巧分享

现在生活压力越来越大,过完一天忙碌的工作回到家里开始煲剧是很多人的最爱。说到看视频,资源基本都被「三巨头」——腾讯视频、爱奇艺、优酷所覆盖,而有些朋友喜欢将视频下载下来看。可是却发现,下载的视频格式是kux、qsv、qlv,普通视频播放器根本打不开,这是怎么一回事呢…

怎么使用视频转换器把kux格式转换mp4

在周末或者平时闲暇的时间&#xff0c;很多人可能就是在家里看下视频吧&#xff1f;而且最好的方式&#xff0c;还是下载到本地上来观看&#xff0c;想要啥时候看就啥时候看&#xff0c;想要看哪个地方的就看哪个地方的。但是吧&#xff0c;有人发现了&#xff0c;自己下载的视…

上网成瘾改变大脑结构:语言功能受影响,让人话都说不利索

万博 发自 凹非寺量子位 | 公众号 QbitAI 经常不受控制地拿着手机或平板&#xff0c;漫无目的的刷微博&#xff0c;逛淘宝…… 如果有&#xff0c;那就需要注意了&#xff0c;这种无法自控的上网成瘾&#xff0c;是一种被叫做互联网使用障碍&#xff08;IUD&#xff09;的健康问…

数据统计分析的16个基础概念

来源&#xff1a;EasyShu 本文约11000字&#xff0c;建议阅读20分钟本文介绍了数据统计分析的16个基本概念。 一、描述统计 描述统计是通过图表或数学方法&#xff0c;对数据资料进行整理、分析&#xff0c;并对数据的分布状态、数字特征和随机变量之间关系进行估计和描述的方法…

睡眠剥夺后皮层微结构的广泛变化

大脑皮层的微观结构受到昼夜节律和睡眠剥夺的影响&#xff0c;但这些影响的确切基础尚不清楚。t1加权和t2加权磁共振图像之间的比率(T1w/T2w比率)与髓磷脂水平和树突密度有关&#xff0c;这可能为研究睡眠剥夺大脑的皮质内微观结构提供新的见解。在这里&#xff0c;我们检测了4…

常用的数据分析方法汇总

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 一、描述统计 描述统计是通过图表或数学方法&#xff0c;对数据资料进行整理、分析&#xff0c;并对数据的分布状态、数字特征和随机变量之间关系进行估计和描述的方法…

论文阅读:FLGCNN: A novel fully convolutional neural network for end-to-endmonaural speech enhancement

论文题目&#xff1a;FLGCNN: A novel fully convolutional neural network for end-to-end monaural speech enhancement with utterance-based objective functions 一种新颖的全卷积神经网络&#xff0c;用于具有基于话语的目标函数…

民安汇智量表科普!满意度调查量表怎么选?

满意度量表是进行满意度调查的主要工具和手段。目前的满意度量表因其适用的对象、范围和特点各异&#xff0c;存在着多种类型差异。每个量表都有自己的特点&#xff0c;没有一个量表能用于所有的客户满意度评价&#xff0c;哪怕是在同一期满意度调查&#xff0c;都会因地制宜&a…

一文介绍各种量表类型!

量表是一种测量工具&#xff0c;通常用来测量人们的主观态度、意见或价值观念。我们经常会在问卷中使用量表对调查对象进行测量&#xff0c;最常见到的就是李克特量表&#xff0c;关于量表还有很多的种类&#xff0c;这里具体介绍几种&#xff1a; 一. 李克特量表&#xff08;…

数据分析之数据预处理、分析建模、可视化

大纲 思维导图1. 数据分析概述1.1 简介1.2 发展历程1.3 应用领域1.4 开发流程 2. 数据类型2.1 结构化与非结构化数据2.2 定性与定量数据2.3 截面数据与时间序列数据 3. 数据来源4. 数据预处理方法4.1 数据清洗4.2 数据集成4.3 数据规约4.4 数据变换 5. 数据分析模型5.1 对比分析…

amos里CFA可行性辨别结果怎么看_论文用问卷调查法,数据分析怎么做?

论文问卷数据的分析,看起来简单,好像每个人都会做。但是做起来还真的有点难度。很多初次使用问卷调查方法的人大多以为,问卷数据分析嘛,无外乎对单选题做做频率分析,看看选择不同的选项的人占比有多少。对于评分题目,看看均值是多少,不同性别,年龄段的人群均值是多少。…

『统计学』常用的数据分析方法都在这了!Part.2

阿平 | 作者 知乎 | 来源 1 相关分析 研究现象之间是否存在某种依存关系&#xff0c;对具体有依存关系的现象探讨相关方向及相关程度。 单相关&#xff1a;两个因素之间的相关关系叫单相关&#xff0c;即研究时只涉及一个自变量和一个因变量复相关 &#xff1a;三个或三个以上因…

常用数据分析方法总结

最近优化一个画像产品&#xff0c;用到一些数据分析方法&#xff0c;这里总结一下。 主要参考&#xff1a;https://www.jianshu.com/p/809fb2261b23 &#xff0c;补充一些细节 一、描述统计 描述统计是通过图表或数学方法&#xff0c;对数据资料进行整理、分析&#xff0c;并…

阅读《Unsupervised Evaluation of Interactive Dialog with DialoGPT》

Unsupervised Evaluation of Interactive Dialog with DialoGPT 目录 Abstract 1 Introduction 2 Related Work 2.1 Automatic Dialog Evaluation 2.2 Dialog Qualities 2.3 Pre-trained Dialog Models 3 Data Collection 3.1 Turn-Level Annotation 3.2 Dialog-Level Annotati…

循证护理教育中的移动辅助同伴评估方法

摘要&#xff1a; 学习循证护理的学生可以帮助医疗保健团队做出适当的医疗决策&#xff0c;并为患者提供有价值的建议&#xff0c;从而优化特定情况下的患者护理质量。在临床工作中&#xff0c;护理人员通过搜索相关的经验性护理文献来参与决策&#xff0c;这是进入临床实践所需…

期末考试复习笔记(标红表示重要)

目录 相关系数的比较 数据的类型 回归模型的统计检验与统计意义 参数检验 非参数检验 统计距离 量表 李克特量表 权重 聚类图分析 聚类分析简介 聚类的用途 聚类方法 两步聚类法(TwoStep Cluster) 箱线图分析 中心位置的作用 伪相关 标准化的性质 受&#xf…

如何换算不同等级的李克特量表(5级、7级、10级等)

※ 版权所有&#xff0c;转载请联系作者 ※ 在做量表问卷的时候&#xff0c;会发现有些问卷是5级李克特量表&#xff08;5-point Likert scale&#xff09;&#xff0c;有的是7级李克特量表&#xff08;7-point Likert scale&#xff09;&#xff0c;有的为了更好的得到结果使…