佛山网站建设 奇锐科技,网站开发 ide,哈尔滨vi设计公司,中信建投证券股份有限公司概念
凸包#xff1a;一个能够将所有给定点围住的最小周长封闭图形。 稳定凸包#xff1a;在当前组成凸包的点集 V0V_0V0 中新增一个不在凸包上的点#xff0c;形成新点集 V1V_1V1#xff0c;若可以使 V1V_1V1 中所有点都在 V1V_1V1 的点的凸包上#xff0c;则这…概念
凸包一个能够将所有给定点围住的最小周长封闭图形。 稳定凸包在当前组成凸包的点集 V0V_0V0 中新增一个不在凸包上的点形成新点集 V1V_1V1若可以使 V1V_1V1 中所有点都在 V1V_1V1 的点的凸包上则这个凸包不稳定。反之则是稳定凸包。
求解凸包
问题
给定在平面直角坐标系中 nnn 个点 Pi(xi,yi)P_i(x_i,y_i)Pi(xi,yi)求解这些点的凸包。
思考
因为凸包是最小周长的封闭图形所以凸包一定是由多条线段构成的毕竟两点之间直线最短。
也就是说凸包一定是多边形。说了跟说了一样
暴力算法
可以发现对于凸包的一条边这条边所在的直线一定使得所有点都在其左边或者右边。
所以枚举两个点 P0,P1P_0, P_1P0,P1判断所有点是否在 P0P1P_0P_1P0P1 同一边。
时间复杂度 O(n2)O(n^2)O(n2)
分治
横坐标最大和最小的两点一定在凸包上。而且这两点将凸包分为上凸和下凸。
然后分别对上凸包和下凸包用分治进行求解。
若是上凸包假设当前分治到点 Pl,PrP_l, P_rPl,Pr 之间则 PmidP_{mid}Pmid 为在 PlPrP_lP_rPlPr 上方离 PlPrP_lP_rPlPr 最远的节点然后继续分治 PlPmid,PmidPrP_lP_{mid}, P_{mid}P_rPlPmid,PmidPr。
若是下凸包则 PmidP_{mid}Pmid 为在 PlPrP_lP_rPlPr 下方离 PlPrP_lP_rPlPr 最远的节点。其他同理。
时间复杂度 O(nlogn)O(n\log n)O(nlogn)
Graham扫描法
设 P0P_0P0 为 yyy 坐标最小的点。然后将 yyy 坐标最小的点从 PPP 中删除
将除 P0P_0P0 外点按照以 P0P_0P0 为极点、任意一条从 P0P_0P0 出发的射线为极轴的极坐标排序。此处按逆时针方向排序
然后将 P0P_0P0 丢入当前凸包。
接下来假设 PPP 已经按照极坐标排序DDD 表示凸包内的点DDD 内点按照加入顺序排序即 D0D_0D0 是第一个加入的。
将排好序的点依次访问更新凸包假设当前点为 PiP_iPi当前凸包内点为 D0,D1,...,DdD_0,D_1,...,D_dD0,D1,...,Dd。
由于是逆时针排序的所以 DDD 中点按顺序组成的每条边相对与上一条边一定往左偏。
我们判断 PiDdP_iD_dPiDd 与 DdDd−1D_dD_{d -1}DdDd−1 的关系。若 PiDdP_iD_dPiDd 相当于 DdDd−1D_dD_{d -1}DdDd−1 往右偏则 DdD_dDd 在 PiDd−1P_iD_{d-1}PiDd−1 左侧我们将 DdD_dDd 删除然后 ddd 减一。
若PiDdP_iD_dPiDd 相当于 DdDd−1D_dD_{d -1}DdDd−1 往左偏则不需要删除。继续 Pi1P_{i1}Pi1。