[图形学]凸包生成算法附C++实现

凸包(Convex Hull)是一个计算几何(图形学)中的概念,简单的来说就是对于一个给定的点集,我们需要求得一个凸多边形把给定的点集全部包含起来。

先附上我的结果

如上图可以看到用绿色的线连成的一个凸多边形,就是一个凸包,它包含点集中所有的点。

一、算法流程

1、求出点集中满足min(x-y)、min(x+y)、max(x-y)、max(x+y)的四个点,并按逆时针(或者顺时针)方向组成一个点的链表。这4个点是离散点中与包含离散点的外接矩形的4个角点最近的点。这4个点构成的多边形作为初始凸包。

2、对于每个凸包上的点I和他的后续点为J,计算矢量线段IJ右侧的所有点到IJ的距离(若顺时针链表则计算左侧的点),求出距离最大的点K。

3、若存在K,则将K插入I到I之后 、J之前, 并将K赋给J(即更新矢量线段IJ = IK)。

4、重复2、3步,直到点集中没有在线段IJ右侧的点为止。

5、将J赋给I,J取其后续点,重复2、3、4步。

6、当凸包中任意相邻两点连线的右侧不存在离散点时,结束点集凸包求取过程。

 

二、我的实现

void 
  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值