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

简介: 点集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

目录
相关文章
|
10月前
|
人工智能 算法
算法提高:组合数学| 容斥原理常见应用
容斥原理常见的问题如下。 (1) 篮球、羽毛球、网球三种运动,至少会一种的有22人,会篮球的有15人,会羽毛球的有17人,会网球的有12人,既会篮球又会羽毛球的有11人,既会羽毛球又会网球的有7人,既会篮球又会网球的有9人,那么三种运动都会的有多少人? (2) 《西游记》《三国演义》《红楼梦》三大名著,至少读过其中一本的有20人,读过《西游记》的有10人,读过《三国演义》的有12人,读过《红楼梦》的有15人,读过《西游记》《三国演义》的有8人,读过《三国演义》《红楼梦》的有9人,读过《西游记》《红楼梦》的有7人。问三本书全都读过的有多少人?
110 0
算法提高:组合数学| 容斥原理常见应用
|
10月前
|
机器学习/深度学习 算法
算法提高:组合数学| 卡特兰数的实现
卡特兰数列是组合数学中在各种计数问题中常出现的数列,其前几项为1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012…… 卡特兰数首先是由欧拉在计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,即在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数用Hn表示,Hn即卡特兰数。
92 0
算法提高:组合数学| 卡特兰数的实现
|
算法 Java C++
蓝桥杯 算法训练 小生物的逃逸(球坐标公式+暴力求解)
蓝桥杯 算法训练 小生物的逃逸(球坐标公式+暴力求解)
|
机器学习/深度学习 传感器 算法
基于有限差分法和追赶法解对角矩阵解二维热传导问题附matlab代码
基于有限差分法和追赶法解对角矩阵解二维热传导问题附matlab代码
|
机器学习/深度学习 算法
模拟退火-n皇后问题
模拟退火-n皇后问题
|
算法 定位技术 Perl
LDUOJ——山(计算几何+二分+精度)
LDUOJ——山(计算几何+二分+精度)
75 0
|
开发者
膜拜(离散化差分模板题)
题目描述 小鱼有 n 名优秀的粉丝。 粉丝们得知小鱼将会在一条直线上出现,打算去膜他。为了方便,粉丝们在这条直线上建立数轴。 第 i 名粉丝有一个侦查区间[li,ri] 。如果小鱼在 j(li≤j≤ri) 处出现,这名粉丝将立刻发现并膜他。 小鱼希望膜他的人越多越好,但是他不能分身,因此只能选择一个位置出现。 小鱼想知道自己最多能被多少个人膜。
191 0
膜拜(离散化差分模板题)
【算法提高——第三讲(一)】图论(3)
【算法提高——第三讲(一)】图论(3)
【算法提高——第三讲(一)】图论(3)
【算法提高——第三讲(二)】图论(3)
【算法提高——第三讲(二)】图论(3)
【算法提高——第三讲(二)】图论(3)