本文主要是介绍hdu 题目2018 Shape of HDU(判断凸多边形),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Shape of HDU
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4395 Accepted Submission(s): 1950
创业是需要地盘的,HDU向钱江肉丝高新技术开发区申请一块用地,很快得到了批复,据说这是因为他们公司研发的“海东牌”老鼠药科技含量很高,预期将占全球一半以上的市场。政府划拨的这块用地是一个多边形,为了描述它,我们用逆时针方向的顶点序列来表示,我们很想了解这块地的基本情况,现在请你编程判断HDU的用地是凸多边形还是凹多边形呢?
4 0 0 1 0 1 1 0 1 0
convex
判断一个多边形是否为凸多边形
一次判断新形成的边与前一个边的顺逆关系
#include <stdio.h>
struct point{
int x,y;
};
double cross(point p0,point p1,point p2)
{ // 两个向量 a-> (p1.x-p0.x, p1.y-p0.y) 和 b->(p2.x-p1.x, p2.y-p1.y)
// 两个向量叉积 (a.x*b.y - a.y*b.x)
//叉积结果 >0 ,则向量 a 在向量 b的顺时针方向; <0则相反; 等于0则在同一直线
return (p1.x-p0.x)*(p2.y-p1.y) - (p1.y-p0.y)*(p2.x-p1.x);
}
int main()
{
int n;
point p[1010];
while(scanf("%d",&n),n )
{
int i,flag = 0;
for(i=0;i<n;i++){ //逆时针储存多边形各个点的坐标
scanf("%d%d",&p[i].x,&p[i].y);
}
p[n]=p[0]; p[n+1]=p[1]; // 增加两个点代表最开始的两个点,以形成循环
for(i=2;i<=n+1;i++){
if(cross(p[i-2],p[i-1],p[i])<0 ) flag=1;
}
if(!flag) printf("convex\n");
else printf("concave\n");
}
return 0;
}
这篇关于hdu 题目2018 Shape of HDU(判断凸多边形)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!