凸包算法

  凸包指的是当给定n个点的坐标时,我们可以用某几个点来将所有的点包围,形成一个凸包,这里我们采用的是Graham扫描算法。我们用一个栈来装载这几个点。
  首先我们选择最低的y坐标点,如果存在多个,选择最左端的即 x坐标最小的一个点,作为标准基点,然后以此点作为基准来计算其余各点的极坐标,按照逆时针的顺序排序,如果某几点的极坐标相等,则保留距离最远的那个点,删除另外的几点。对当前的几点依次取3点进行扫描,利用叉积判断点是向有 依次对所有的点进行判断。我们在判断的时候,假设三个点p0,p1,p2构成 凸包指的是当给定n个点的坐标时,我们可以用某几个点来将所有的点包围,形成一个凸包,这里我们采用的是Graham扫描算法。
 我们用一个栈来装载这几个点。首先我们选择最低的y坐标点,如果存在多个,选择最左端的即 x坐标最小的一个点,作为标准基点,然后以此点作为基准来计 算其余各点的极坐标,按照逆时针的顺序排序,如果某几点的 极坐标相等,则保留距离最远的那个点,删除另外的几点。 对当前的几点依次取3点进行扫描,利用叉积判断点是向有 依次对所有的点进行判断。我们在判断的时候,假设三个点p0,p1,p2构成,我们要判断的是p1这个点我们是否要保留,就是我们要判断p0到p1,与p0到p2的向量相乘,主要是为了判断如果直接连接p0,p2这两个点能否将p1包括。 向量的叉乘,如果向量叉积小于0则说明向左转,p1出栈。如果改点出站栈了,则栈里继续取两个点继续进行判断直到满足叉积情况,然后入栈. 同时栈里保证不小于2个元素,并且每一次的元素进栈都是对当前点进栈前栈顶的点进行的判断,这样我们就得到了这些点的凸包。,我们要判断的是p1这个点我们是否要保留,就是我们要判断p0到p1,与p0到p2的向量相乘,主要是为了判断如果直接连接p0,p2这两个点能否将p1包括。
  向量的叉乘,如果向量叉积小于0则说明向左转,p1出栈。如果改点出站栈了,则栈里继续取两个点继续进行判断直到满足叉积情况,然后入栈.同时栈里保证不小于2个元素,并且每一次的元素进栈都是对当前点进栈前栈顶的点进行的判断,这样我们就得到了这些点的凸包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值