算法提高:计算几何基础 | 详解凸包问题

简介: 点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上,或者在其内

640.jpg


点集Q的凸包(convex hull)是指一个最小凸多边形,满足Q中的点或者在多边形边上,或者在其内。图1中由线段表示的多边形就是点集Q={P0,P1,P2,P3,P4,P5,P6}的凸包。

640.png


■ 图1 点集的凸包


01、实例应用:捕野猪

问题描述:

由于马克的家在未开发的原始森林,因此野生动物很多。春节前,马克和村民商谈决定大家一起捕野猪,将其作为年猪。捕野猪的方法很简单: 去捕野猪的人一人站一个地方。他们抓住同一根绳子,将一大片森林围起来。只要野猪在里面,就跑不掉。(围成的多边形是简单多边形)

输入:

先输入一个正整数t,表示有t组数据。然后输入一个正整数n,表示有n个人。接下来n行每行有两个整数,表示一个人的位置(顺序是沿着绳子向一个方向输入)。最后一行有两个整数,表示野猪的位置。

输出:

输出是否野猪被捕。若是,则输出yes,否则输出no。

输入样例:

1
3
0 0
2 0
0 2
1 1

输出样例:


yes

解题思路:

根据给定的点构造一个最小凸边形,然后判断野猪的位置与凸包的关系,确定是在凸包内,还是在凸包外。

判断点是不是在凸包中,以点P为端点,向右边做一条射线,由于多边形是有界的,所以设L一定与多边形相交,当交点数为基数时,P点在多边形内,否则P点在多边形外。其中特殊情况为: L与多边形的顶点相交,当顶点的两相邻边在射线的同侧时,该顶点不算,否则算一个;当射线与一条边重合时,这条边不算,进行逐条线段的扫描。

参考程序:

eb5432dea5d919ad02b0640f43ae0979.png


28531b91483b69a4fa67ae22a3307d25.png


34f1bc3d9f6443ca267ee11b0c6e0d30.png

目录
相关文章
|
数据可视化 前端开发 数据管理
LayUI之树形权限菜单
LayUI之树形权限菜单
298 0
|
数据采集 机器学习/深度学习 数据格式
在使用 Core ML 时,有哪些注意事项?
在使用 Core ML 时,有哪些注意事项?
353 1
|
缓存
Centos7.3修改yum源为阿里云yum源
Centos7.3修改yum源为阿里云yum源
10093 0
Centos7.3修改yum源为阿里云yum源
|
搜索推荐 开发者
动态绑定的优缺点是什么?
【10月更文挑战第14天】总的来说,动态绑定是一种非常有用的编程机制,它为程序的灵活性、扩展性和多态性提供了重要的支持。然而,它也带来了一些性能开销、运行时错误风险和代码理解难度等问题。在实际编程中,我们需要根据具体的情况权衡利弊,合理地使用动态绑定,以达到最佳的编程效
476 138
uniapp带参数跳转,新页面接收参数
uniapp带参数跳转,新页面接收参数
544 0
|
机器人 Python
凸包(Convex Hull)
凸包(Convex Hull)是一个计算几何中的概念,它表示在平面上或空间中一组点集的最小凸包。简单来说,就是一个凸多边形,这个多边形的所有顶点都是点集中最外部的点,且所有内部角都小于 180 度。凸包的计算可以用于许多场景,如碰撞检测、数据压缩和最近邻搜索等。
697 6
|
机器学习/深度学习 存储 自然语言处理
使用深度学习模型进行情感分析!!!
本文介绍了如何使用深度学习模型进行中文情感分析。首先导入了必要的库,包括`transformers`、`pandas`、`jieba`和`re`。然后定义了一个`SentimentAnalysis`类,用于处理数据、加载真实标签和评估模型准确性。在主函数中,使用预训练的情感分析模型对处理后的数据进行预测,并计算模型的准确性。
486 0
|
存储 算法 C++
【C++】详解STL容器之一的 vector
【C++】详解STL容器之一的 vector
|
机器学习/深度学习 编解码 算法
小目标检测新方法SCTransNet | 空间通道交叉Transformer & 互补前馈达成完美语义信息传递
小目标检测新方法SCTransNet | 空间通道交叉Transformer & 互补前馈达成完美语义信息传递
1661 0
|
算法 C++ 容器
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
C++之vector容器操作(构造、赋值、扩容、插入、删除、交换、预留空间、遍历)
1197 0

热门文章

最新文章