题目描述
给出一些点,求凸包的周长。
什么是凸包
用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点。
凸包的Andrew算法
Andrew算法是graham的变种。它的思想是这样的:
先按横坐标排序,然后选出最左边的点(最左边的点一定要选入凸包),这样,就把问题转化为求凸包的上下凸壳。考虑求下凸壳,考虑如果求好了一个下凸壳,现在从最右边加入一个点,那么就要把所有和这个点形成上凸形势的点都删去,由于斜率具有单调性,所以只要删去末尾的一些点就可以了,可以用栈维护。
如何判断上凸下凸
有了Aandrew算法,最重要的问题就是如何判断上凸下凸形势了,当然可以利用斜率来判断,但是斜率可能会有精度问题,可以用向量的叉积来判断。cross=x1∗y2−x2

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



