判断凸多边形
以HDU2108为例,去AC吧。 //点逆序输入 import java.util.Scanner; //1s public class HDU2108 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(true) { int x,y; int n = sc.nextInt(); if(0==n) { break; } Point[] p = new Point[n]; for(int i=0; i<n; i++) { p[i] = new Point(); } for(int i=0; i<n; i++) { x = sc.nextInt(); y = sc.nextInt(); p[i] = new Point(x,y); } //凸多边形 boolean tag = true; int j,k,t; for(int i=0; i<n; i++) { //k,t直接对n求余就行了 j = i; k = i+1; t = i+2; //以三角形为例看看 if(k==n) { k = 0; } if(t==n+1) { t = 1; } if(t==n) { t = 0; } //注意是后面减去前面的 Point p1 = new Point(p[k].x - p[j].x, p[k].y - p[j].y); Point p2 = new Point(p[t].x - p[k].x, p[t].y - p[k].y); //叉积 int ans = p1.x*p2.y - p1.y*p2.x; if(ans<0) { tag = false; break; } } if(tag) { System.out.println("convex"); }else { System.out.println("concave"); } } } } class Point { int x; int y; public Point() { this.x = 0; this.y = 0; } public Point(int x, int y) { this.x = x; this.y = y; } }
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.