学习凸包算法

1. 从如何求点在四边形中开始。

设有一四边形为ABCD,一点P,求四边形和P的位置关系。很明显可以推广到多边形。。。

网上一般的算法是根据叉乘来做的,感觉叉乘太好用了qwq

首先定义四个向量

可以这么理解,如果是两个向量头和头相连,如果角度>180°的话,那么这两个向量的叉乘是一个小于0的数字。

如果像这样的情况的话,旋转一圈,B和C的夹角都大于180°了,那么这个P点肯定在这个多边形的外边。

点在多边形外的情况

点在多边形内的情况

如果一开始的方向就是相反的话,那就整个符号都是相反的。需要保证四个向量的叉乘是同号的(一定要保证每个都同号)。

但是如果不是凸多边形,或者这个顺序是瞎给的怎么办呢?那么我们就改题目吧……找这个凸包怎么找?

算法是这样的:先找到一个顶点,比如最下的顶点。然后以这个顶点为基准,求到其他点的向量。

构造一个栈,把每个点按照y坐标的顺序排序,把前两个点放入栈中,计算栈顶两个点与该点三点向量是否是逆时针转动(第一步肯定是的)。

比如第一步栈中就是P,A,B三个点。PA和PB肯定是逆时针小于180度的。栈中元素为P,A,B

然后第二步,比较A,B,C三个点,AB和BC就不是逆时针小于180度了,扔掉B这个点。C进入栈,所以现在栈中元素为P,A,C

第三步。D入栈,比较A,C,D三个点,是逆时针小于180度,现在是栈中元素为P,A,C,D。

第四步,E入栈,比较C,D,E三个点,是逆时针小于180度,现在的栈中结果是P,A,C,D,E。

第五步,所有的点遍历完毕,算法结束。

输出:凸包为:P,A,C,D,E(当然用栈逆序打印也可以)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 13,346评论 0 13
  • 高级钳工应知鉴定题库(858题) ***单选题*** 1. 000003难易程度:较难知识范围:相关4 01答案:...
    开源时代阅读 11,308评论 1 9
  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 13,797评论 0 5
  • 读完两人的传记,同为民国四大美人,命运却有着天壤之别,一切的命运,在巧合中伴随着必然。 学生时代技能方面 ...
    嘴不甜的夜猫阅读 1,819评论 0 0
  • 执行事务 事务机制可以确保数据一致性。 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为A...
    cyroom阅读 8,387评论 0 1

友情链接更多精彩内容