判断凸多边形

多边形特点:所有点都在边的一侧或者边上,根据两点式直线(y-y1)/(x-x1)=(y2-y1)/(x2-x1)在同一侧时同为大于或小于号

View Code
 1 struct point
2 {
3 int x;
4 int y;
5 }
6 struct polygon
7 {
8 int EdgeNumber;
9 int VertexNumber;
10 point p[VertexNumber];
11 }
12 void CreatPolygon(polygon pyn,int edgenumber,point p[edgenumber])
13 {
14 for(int i=0;i<vertexnumber;i++)
15 {
16 pyn.p[i].x=p[i].x;
17 pyn.p[i].y=p[i].y;
18 }
19 pyn.VertexNumber=edgenumber;
20 pyn.EdgeNumber=edgenumber;
21 }
22 isconvexhull(polygon pyn)
23 {//所有点都在边的一侧或者边上
24 //两点式直线 (y-y1)/(x-x1)=(y2-y1)/(x2-x1)
25 int t[pyn.Edgenumber][pyn.Edgenumber];
26 int flag=1,t=1;
27 for(int i=0;i<pyn.EdgeNumber;i++)
28 for(int j=0;j<pyn.EdgeNumber;j++)
29 {
30 if(pyn.p[j].y*(pyn.p[i+1].x-pyn.p[i].x)-pyn.p[j].x*(pyn.p[i+1].y-pyn.p[i].y)+pyn.p[i].x*pyn.p[i+1].y-pyn.p[i+1].x*pyn.p[i].y>=0)
31 t[i][j]=1;
32 else
33 t[i][j]=0;
34 }
35 for(int i=0;i<pyn.EdgeNumber;i++)
36 for(int j=0;j<pyn.EdgeNumber;j++)
37 if(t[i][j]!=t[0][0])
38 {flag=0;break;}
39 if(flag==1)
40 printf("convex");
41 else
42 printf("non-convex");
43 }



posted @ 2011-10-23 12:46  Greenbird  Views(370)  Comments(0Edit  收藏  举报

To further demonstrate the capabilities of KinFu Large Scale, we made another example with a room.