随笔分类 -  凸包

摘要:通过这题有学习了关于求凸多边形的直径的方法,真的很巧妙~旋转卡壳可以用于求凸包的直径、宽度,两个不相交凸包间的最大距离和最小距离等,参考了下面的两个博客,原理基本上明白了。留下链接,以便后面复习用~http://www.cnblogs.com/Booble/archive/2011/04/03/2004865.htmlhttp://www.cppblog.com/staryjy/archive/2009/11/19/101412.html其实这题完全可以不用旋转卡壳,可能是后台数据量很小,直接用暴力求解也可以过,而且时间和用了旋转卡壳的时间相差无几。不用旋转卡壳(125ms)#include 阅读全文
posted @ 2012-07-18 15:15 Misty_1 阅读(226) 评论(0) 推荐(0)
摘要:据说这题是经典的凸包题,可以直接套模板,由于刚开始看凸包,因此以它为例题,熟悉一下凸包模板~点集Q的凸包是一个最小的凸多边形P,满足Q中的每个点或者在P的边界上,或者在P的内部,通俗点讲就是,一块木板上有许多铁钉,而凸包就是要求包围了所有这些铁钉的一条拉紧了的橡皮绳所构成的形状。求凸包的一种比较常用的方法的Graham扫描法,其步骤为:步骤1:以y轴最低点为基点,找到基点p0。步骤2:以基点p0为一个坐标系的远点,求各点与基点p0的极角,并一次从小到大排序步骤3:按照顺序,每个点都要判断与其前面的点构成的两条线段转向问题(左转还是右转?用叉积判断)。步骤4:依次下去,知道所有的点结束,就完成的 阅读全文
posted @ 2012-07-17 20:14 Misty_1 阅读(200) 评论(0) 推荐(0)
摘要:题意:给出一个多边形和每个点的坐标,以及一个圆的圆心坐标和半径,让你判断该园能否放入这个多边形中。思路:先判断该多边形是否是凸多边形,由于给出多边形的坐标可能是顺时针方向也可能是逆时针方向,所以判断时分两种情况,如果是凸多边形,在判断该圆的圆心是否在多边形内部,这也可以用叉乘来判断,最后判断圆心到边的距离是否都大于圆的半径。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include 阅读全文
posted @ 2012-07-17 11:37 Misty_1 阅读(187) 评论(0) 推荐(0)