HDU 2108 逆时针给出多边形的顶点,判断是否为凸多边形,水题
2013-08-02 19:04
411 查看
下面是别人解题报告的链接,很详细,写的很好
http://blog.csdn.net/chl_3205/article/details/8520597
下面贴我的代码
View Code
求凸包有很多算法吧,应该,下面是详细介绍一种貌似叫Graham算法求凸包,但是该算法数值稳定性没有Andrew算法好,它还要求角的余弦值,排序。
http://wenku.baidu.com/view/5bfee1dbd15abe23482f4d84.html
http://blog.csdn.net/chl_3205/article/details/8520597
下面贴我的代码
//求凸包Andrew扫描算法,复杂度主要为排序O(n*logn),扫描为O(n) #include <cstdio> #include <algorithm> #define INF 0x7fffffff using namespace std; struct point { int x,y; bool operator <(const point & other) const { if(x < other.x) return true; if(x == other.x && y < other.y) return true; return false; }; } p[330],convex[330]; bool checkDir(point p0,point p1,point p2) { if((p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y) * (p2.x-p0.x) <= 0) return true; else return false; } int main() { // freopen("in.cpp","r",stdin); int n; while(scanf("%d",&n) ,n) { for(int i=0; i<n; ++i) scanf("%d%d",&p[i].x,&p[i].y); sort(p,p+n); int m=0; for(int i=0; i<n; ++i) { while(m > 1 && checkDir(convex[m-2],convex[m-1],p[i]) ) --m; convex[m++] = p[i]; } int k =m; for(int i=n-2; i>=0; --i) { while(m > k && checkDir(convex[m-2],convex[m-1],p[i]) ) --m; convex[m++] = p[i]; } if(n >1) --m; if(m == n) printf("convex\n"); else printf("concave\n"); } return 0; }
View Code
求凸包有很多算法吧,应该,下面是详细介绍一种貌似叫Graham算法求凸包,但是该算法数值稳定性没有Andrew算法好,它还要求角的余弦值,排序。
http://wenku.baidu.com/view/5bfee1dbd15abe23482f4d84.html
相关文章推荐
- hdu 2108:Shape of HDU(计算几何,判断多边形是否是凸多边形,水题)
- hdu 2108 Shape of HDU【判断多边形是否是凸多边形模板】
- hdu 2108 Shape of HDU(判断多边形是否为凸多边形)
- hdu 2108 Shape of HDU【判断多边形是否是凸多边形模板】
- hdu 2108 Shape of HDU【判断多边形是否是凸多边形模板】
- HDU 2108 Shape of HDU(判断给定的图形是否是凸多边形)
- (hdu step 7.1.1)Shape of HDU(判断一个多边形是否是凸多边形)
- hdu 2108 Shape of HDU 判断是否为凸多边形
- POJ1584 A Round Peg in a Ground Hole 判断多边形是否为凸多边形,判断凸多边形是否在圆内
- hdu 1756(判断点是否在多边形内)
- hrbustoj 1306:再遇攻击(计算几何,判断点是否在多边形内,水题)
- HDU 1756 Cupid's Arrow(判断点是否在任意多边形上且包括边)
- hdu 2108-判断凸多边形201308121122
- hdu 3902 Swordsman 判断多边形是否轴对称以及对称轴个数
- poj 1584 A Round Peg in a Ground Hole(判断凸多边形+圆是否在凸多边形内)
- POJ1584 A Round Peg in a Ground Hole 判断多边形是否为凸多边形,判断凸多边形是否在圆内
- hdu 2108(判断多边形是凸的,还是凹的)
- POJ1584 判断多边形是否为凸多边形,并判断点到直线的距离
- 计算几何 判断多边形顶点是否是顺时针
- POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,判断圆是否在凸多边形内)