2108 ACM 向量积 凹凸
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2108
图一中,向量a × 向量 b 根据右手定则,得出向量c的方向。即为凸多边形。
图二中,若向量a × 向量 b 根据右手定则,则得出的向量d的方向,即为凹多边形。
又根据图一中,向量a × 向量 b为正,所以根据坐标得 (x[i+1]-x[i])*(y[i+2]-y[i])-(x[i+2]-x[i])*(y[i+1]-y[i]) > 0
代码:
#include<cstdio> int main () { int n; int x[1001],y[1001]; while(scanf("%d",&n)!=EOF&&n) { for(int j=0;j<n;j++) scanf("%d %d",&x[j],&y[j]); x[n]=x[0]; x[n+1]=x[1]; y[n]=y[0]; y[n+1]=y[1]; int sum,i; for( i=0;i<n;i++) { sum=(x[i+1]-x[i])*(y[i+2]-y[i])-(x[i+2]-x[i])*(y[i+1]-y[i]); if(sum<0) break; } if(i!=n || sum<0) printf("concave\n"); else printf("convex\n"); } }