最小凸多边形(凸包)

article/2025/9/18 10:18:51

描述

给出平面上n个点的坐标,计算最远两点间的距离,以及包含所有点的最小凸多边形(凸包)

输入
第一行一个整数n,接下来是n行的实数对,表示n个点坐标。2<=n<=10000
n
x1 y1
x2 y2

xn yn

输出
输出2行,第一行是最远两点间的距离,结果保留四位小数。第二行是从P0开始,逆时针输出凸包的顶点号。

顶点号为0到n-1,由点的输入次序决定。

P0点表示最下方的点号,如果有多个点并列最下方,则P0为其中最左边的点号。

输入样例 1

9
200 400
300 400
300 300
400 300
400 400
500 400
500 200
350 200
200 200

输出样例 1
360.5551
8 6 5 0

这里用于sort排序的数组ord[],用的很巧妙。
凸包形成过程如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#define eps 1e-8
using namespace std;
typedef struct
{double x, y;
} point;point p[10005];
//用于排序的标号,并保存输入时的顺序标号 
int ord[10005];
int n;
//stack用于保存最小凸包的顶点序号 
int stack[10005];double dist(point a,point b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}int check(point a,point b,point c){double k;k = a.x*b.y-a.y*b.x+b.x*c.y-b.y*c.x+c.x*a.y-c.y*a.x;if(k>eps)return 1;else if(k<-eps)return -1;elsereturn 0;
}bool cmp(int a,int b){//排序依据 int i;i=check(p[ord[0]],p[a],p[b]);if(i==0) return(dist(p[ord[0]],p[a])<dist(p[ord[0]],p[b]));else return i>0;
}int main()
{cin >> n;int i, j,temp;for (i = 0; i < n;i++){cin >> p[i].x >> p[i].y;ord[i] = i;}int k = 0;for (i = 1; i < n;i++){if(p[i].y<p[k].y || (p[i].y==p[k].y && p[i].x<p[k].x))k = i;}swap(ord[0], ord[k]);//将所有点按与水平面夹角大小排序 sort(ord + 1, ord + n, cmp);stack[0] = ord[0];int top=0;for (i = 1; i < n;i++){/*当点p[ord[i]]在线p[stack[top-1]],p[stack[top]]的右边时,链接不构成凸包.所以舍去栈顶的点p[stack[top]],换成点p[ord[i]]。                    */ while(top>0 && check(p[stack[top-1]],p[stack[top]],p[ord[i]])<=0)  top--;stack[++top] = ord[i];}double ans;for (i = 0; i <= top;i++){//求最长两点距离 for (j = i + 1; j <= top;j++){ans = max(dist(p[stack[i]], p[stack[j]]),ans);}}printf("%.4lf\n", ans);for (i = 0; i <= top; i++)cout << stack[i] << " ";return 0;
}

http://chatgpt.dhexx.cn/article/8qpgT7xZ.shtml

相关文章

计算机几何 - 如何判断一个多边形是凸多边形还是凹多边形

什么是凸多边形和凹多边形&#xff1f; 凸多边形&#xff1a;每个内角都是锐角或钝角&#xff0c;没有大于180度的内角(例如&#xff0c;三角形、正方形)。 凹多边形&#xff1a;至少有一个大于180度的内角(例如&#xff0c;五角星)。 注&#xff1a;大于180度的角又被称为优角…

多边形扩展和收缩(凸多边形和凹多边形)

目录 背景介绍&#xff1a;知识积累&#xff1a;思路点拨&#xff1a;代码区域&#xff1a; 背景介绍&#xff1a; 如下图所示&#xff0c;黑色是原多边形&#xff0c;红色是扩展的多边形&#xff0c;蓝色是收缩的多边形。这是最终的效果。 PS&#xff1a;楼主使用的是ES6的语…

什么是凸多边形和凹多边形

GIS有时需要用算法判断线段是否在多边形内&#xff1b; 最基本的出发点如下&#xff0c; 线段在多边形内的一个必要条件是线段的两个端点都在多边形内&#xff0c;但由于多边形可能为凹&#xff0c;所以这不能成为判断的充分条件&#xff1b; 就是说&#xff0c; 如果线段的两…

判断多边形是凹多边形还是凸多边形,以及求凹点

转载&#xff1a;计算机几何 - 如何判断一个多边形是凸多边形还是凹多边形_刘建宁的博客-CSDN博客_凹多边形和凸多边形的区别 重点&#xff1a; 1.凸多边形指的是多边形的每个内角小于180度。 2.凹多边形指的是至少有一个内角大于180度。 判断多边形性质 多边形内角和等于(n…

凸多边形最优三角

前言&#xff1a;大三下算法课&#xff0c;自己看的凸多边形最优三角&#xff0c;最后上台讲解&#xff0c;和子涵苗子等一起的一段时间 1.相关概念 • 凸多边形&#xff1a;一个简单多边形及其内部构成一个闭凸集时&#xff0c;则 称该简单多边形为一个凸多边形。 • 边&#…

动态规划DP——凸多边形最优三角剖分

1.问题分析 我们可以把披萨饼看作是一个凸多边形&#xff0c;凸多边形是指多边形的任意两点的连线均落在多边形的内部或边界上。 &#xff08;1&#xff09;什么是凸多边形&#xff1f; 如下图所示&#xff0c;是一个凸多边形 如下图所示&#xff0c;不是一个凸多边&#xff0c…

凸多边形、凹多边形、凸包算法

凸多边形&#xff1a; &#xff08;Convex Polygon&#xff09;可以有以下三种定义&#xff1a; 1、没有任何一个内角是优角&#xff08;Reflexive Angle&#xff09;的多边形。 2、如果把一个多边形的所有边中&#xff0c;有一条边向两方无限延长成为一直线时&#xff0c;其他…

搜狗浏览器屏蔽广告插件_“云法庭”里“云勘验” 法院开审搜狗浏览器插件屏蔽优酷视频广告案...

在第20个世界知识产权日到来之际&#xff0c;北京海淀法院通过“北京法院云法庭”公开开庭审理原告优酷信息技术(北京)有限公司(下称优酷公司)与被告北京搜狗科技发展有限公司、被告北京搜狗信息服务有限公司(下合称搜狗公司)涉搜狗浏览器插件屏蔽优酷视频广告不正当竞争纠纷案…

搜狗浏览器屏蔽广告插件_“云法庭”里“云勘验”,海淀法院开庭审理搜狗浏览器插件屏蔽优酷视频广告不正当竞争纠纷案...

来源&#xff1a; 北京海淀法院 特别提示&#xff1a;凡本号注明“来源”或“转自”的作品均转载自媒体&#xff0c;版权归原作者及原出处所有。所分享内容为作者个人观点&#xff0c;仅供读者学习参考&#xff0c;不代表本号观点。 在第20个世界知识产权日到来之际&#xff0…

搜狗浏览器屏蔽广告插件_“云法庭”里“云勘验”法院开审搜狗浏览器插件屏蔽优酷视频广告案...

在第20个世界知识产权日到来之际&#xff0c;北京海淀法院通过“北京法院云法庭”公开开庭审理原告优酷信息技术(北京)有限公司(下称优酷公司)与被告北京搜狗科技发展有限公司、被告北京搜狗信息服务有限公司(下合称搜狗公司)涉搜狗浏览器插件屏蔽优酷视频广告不正当竞争纠纷案…

【视频广告位叫法】

例如&#xff1a;爱奇艺&#xff0c;优酷&#xff0c;腾讯视频&#xff0c;前贴&#xff0c;中插&#xff0c;暂停贴&#xff0c;后贴广告位&#xff01;

优酷 DSP 广告投放系统架构实践

作者 | 鸿雁 阿里文娱技术专家 导读&#xff1a;随着 RTB 网络在线展现广告交易模式的兴起&#xff0c;各大公司都纷纷搭建自己的 DSP ( Demand-Side Platform ) 广告投放系统进行获客。优酷在近几年也搭建 DSP 系统&#xff0c;并且在持续迭代。在这一过程中&#xff0c;经历…

优酷视频在网站里播放

工具/原料 准备一组代码&#xff1a; <embed srchttp://static.youku.com/v1.0.0149/v/swf/loader.swf?VideoIDS视频ID&winTypeadshow&isAutoPlaytrue quality"high" width"580" height"435" align"middle" allowScriptA…

网页引用优酷视频并添加封面自动播放

引用优酷视频可以减轻公司的服务器压力&#xff0c;而且和自己上传保存视频相比会方便轻松许多&#xff0c;不过相对的需要忍受广告。 首先你需要在优酷里找到你要引用的视频&#xff0c;或者自己上传。然后打开会有一个分享按钮&#xff1a; 以我使用的第二个为例&#xff0…

html上传优酷视频,如何将视频发布到自己的企业网站上?

郑州做网站是为了更好的宣传企业&#xff0c;如果网站要想有视频的表现形式&#xff0c;那就得花点心思去考虑了。一般情况下&#xff0c;要想把视频放到网站上&#xff0c;无外乎就两种方式&#xff1a;第一、直接把视频上传到网站目录&#xff0c;然后在合适的位置调用。由于…

php视频系统源码,基于ThinkPHP框架仿优酷视频源码带数据,后台功能强大

源码介绍 最新高仿优酷视频网源码带数据&#xff0c;后台功能齐全强大&#xff0c;而且是基于thinkphph内核开发&#xff0c;很不错&#xff0c;虽然是旧版模板&#xff0c;但是也值得学习&#xff0c;尤其是正在学习ThinkPHP框架的人拿来学习&#xff0c;相信你需要&#xff0…

鸿蒙os去广告,隐藏福利?华为鸿蒙OS新惊喜:优酷视频流转播放可免广告

近日&#xff0c;华为鸿蒙OS 2.0开发者公测版推送正式开启&#xff0c;包括华为Mate X2、Mate 40系列等机型均可先行尝鲜。 根据目前已知信息来看&#xff0c;华为手机从6月初开始将可升级鸿蒙系统。 随着参与开发者公测的用户逐渐增多&#xff0c;网上出现大量鸿蒙OS的测试体验…

优酷视频整段代理php,thinkphp仿优酷带数据源码|php仿优酷视频源码带后台功能强大...

本项目是仿优酷官网&#xff0c;优酷官网是一个集多种知识面为一体的网站&#xff0c;能全面的锻炼我们的技能,所以我们决定仿优酷网。 本项目后台主要实现了&#xff1a;用户管理、分类管理、视频管理、评论管理、权限管理、轮播管理、网站配置和广告管理以及登录退出等模块。…

android加载优酷视频播放器,使用android优酷视频云一些问题

最近项目迭代需要添加视频播放功能&#xff0c;由于若干原因就选择了优酷视频&#xff0c;本来挺简单的一个功能在做的时候居然碰到了若干意想不到的问题&#xff0c;果然还是优酷视频提供的demo最稳定啊&#xff0c;啥问题木有~~o(>_ 好了&#xff0c;闲话不多说&#xff0…

html调用优酷视频播放,优酷网视频播放器站外调用详解

优酷网视频播放器站外调用详解 蓝叶 网站设计 2011-03-21 14201 5评论 自从蓝叶准备做视频盒&#xff0c;就一直在研究各个视频站播放器调用代码&#xff0c;只要搞明白了 代码我都共享出来了&#xff0c;这次说说优酷网播放器的站外调用方法。优酷网默认获取的 站…