欢迎来到天天文库
浏览记录
ID:52564102
大小:113.50 KB
页数:11页
时间:2020-03-28
《C语言判断点面位置关系系统.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C语言判断点面位置关系系统一:程序/*此程序适用于任意复杂程度的单连通和复连通多边形区域*/#include#include#defineM36/*给定多边形边数*/floatX[M],Y[M];floatx,y,t,s,Ymin,Ymax,C,D,sn=0,sp=0,xp,yp,l;inti,j=0,k=1;charch[2];voidinput()/*定义输入坐标函数*/{printf("Pleaseinputpointsmadeofarea:");for(i=0;i2、,&Y[i]);/*从键盘输入围成多边形的顶点坐标*/}printf("Pleaseinputonepoint:");scanf("%f,%f",&x,&y);/*从键盘任意输入一点*/}floatfunc(floatn)/*定义求绝对值的函数*/{if(n>0){returnn;}else{return(-n);}}floatMin(floatm,floatn)/*定义求最小值的函数*/{if(m<=n){returnm;}else{returnn;}}floatMax(floatm,floatn)/*定义求最大值的函数*/{if(m>=n){returnm;}e3、lse{returnn;}}voidsimplefun()/*定义判断点是否在凸多边形上、内、外函数*/{xp=(X[0]+X[2])/2;/*起点与第三点的中点横坐标*/yp=(Y[0]+Y[2])/2;/*起点与第三点的中点纵坐标*/printf("xp=%ftyp=%f",xp,yp);for(i=0;i4、]-yp)*(X[M-1]-xp))/2);/*求出凸多边形的总面积并输出*/}}printf("sn=%f",sn);for(i=0;iX[i+1]&&x>X[i+1]&&x5、6、(X[i]X[i]&&x7、eif((X[i]==X[i+1])&&((Y[i]Y[i])8、9、(Y[i]>Y[i+1]&&yY[i+1]))){sp=0;/*如果给定点的纵坐标在相邻两点纵坐标之间,并且相邻两点横坐标相等则sp=0,并跳出循环*/break;}elseif(x==X[i]&&y==Y[i]10、11、x==X[i+1]&&y==Y[i+1]){sp=0;/*如果给定点的坐标等于相邻两点任意一点的坐标,则sp=0,并跳出循环*/break;}}sp=sp+t;if(i==M-2)/*最后一点的情况必须单独讨论,同上*/{l=fu12、nc(((X[0]-x)*(Y[M-1]-y)-(Y[0]-y)*(X[M-1]-x))/2);if(l==0){if((X[0]>X[M-1]&&x>X[M-1]&&x13、14、(X[0]X[0]&&xY[0])15、16、(Y[0]>Y[M-1]&&yY[M-1]))){sp=0;break;}elseif(x==X[0]&&y==Y[0]17、18、x==X[M-1]&&y==Y[M-1]19、){sp=0;break;}}sp=sp+l;/*若前面的if都不执行,则sp就是给定点与各个相邻顶点依次围成的真实的面积之和*/}}/*最终得出结论*/if(sp>sn){printf("Thispoint(%f,%f)isoutoftheregion",x,y);}elseif(sp==sn){printf("Thispoint(%f,%f)isintheregion",x,y);}else{printf("Thispoint(%f,%f)isontheedgeoftheregion",x,y);}printf("Whethertocontinu
2、,&Y[i]);/*从键盘输入围成多边形的顶点坐标*/}printf("Pleaseinputonepoint:");scanf("%f,%f",&x,&y);/*从键盘任意输入一点*/}floatfunc(floatn)/*定义求绝对值的函数*/{if(n>0){returnn;}else{return(-n);}}floatMin(floatm,floatn)/*定义求最小值的函数*/{if(m<=n){returnm;}else{returnn;}}floatMax(floatm,floatn)/*定义求最大值的函数*/{if(m>=n){returnm;}e
3、lse{returnn;}}voidsimplefun()/*定义判断点是否在凸多边形上、内、外函数*/{xp=(X[0]+X[2])/2;/*起点与第三点的中点横坐标*/yp=(Y[0]+Y[2])/2;/*起点与第三点的中点纵坐标*/printf("xp=%ftyp=%f",xp,yp);for(i=0;i4、]-yp)*(X[M-1]-xp))/2);/*求出凸多边形的总面积并输出*/}}printf("sn=%f",sn);for(i=0;iX[i+1]&&x>X[i+1]&&x5、6、(X[i]X[i]&&x7、eif((X[i]==X[i+1])&&((Y[i]Y[i])8、9、(Y[i]>Y[i+1]&&yY[i+1]))){sp=0;/*如果给定点的纵坐标在相邻两点纵坐标之间,并且相邻两点横坐标相等则sp=0,并跳出循环*/break;}elseif(x==X[i]&&y==Y[i]10、11、x==X[i+1]&&y==Y[i+1]){sp=0;/*如果给定点的坐标等于相邻两点任意一点的坐标,则sp=0,并跳出循环*/break;}}sp=sp+t;if(i==M-2)/*最后一点的情况必须单独讨论,同上*/{l=fu12、nc(((X[0]-x)*(Y[M-1]-y)-(Y[0]-y)*(X[M-1]-x))/2);if(l==0){if((X[0]>X[M-1]&&x>X[M-1]&&x13、14、(X[0]X[0]&&xY[0])15、16、(Y[0]>Y[M-1]&&yY[M-1]))){sp=0;break;}elseif(x==X[0]&&y==Y[0]17、18、x==X[M-1]&&y==Y[M-1]19、){sp=0;break;}}sp=sp+l;/*若前面的if都不执行,则sp就是给定点与各个相邻顶点依次围成的真实的面积之和*/}}/*最终得出结论*/if(sp>sn){printf("Thispoint(%f,%f)isoutoftheregion",x,y);}elseif(sp==sn){printf("Thispoint(%f,%f)isintheregion",x,y);}else{printf("Thispoint(%f,%f)isontheedgeoftheregion",x,y);}printf("Whethertocontinu
4、]-yp)*(X[M-1]-xp))/2);/*求出凸多边形的总面积并输出*/}}printf("sn=%f",sn);for(i=0;iX[i+1]&&x>X[i+1]&&x5、6、(X[i]X[i]&&x7、eif((X[i]==X[i+1])&&((Y[i]Y[i])8、9、(Y[i]>Y[i+1]&&yY[i+1]))){sp=0;/*如果给定点的纵坐标在相邻两点纵坐标之间,并且相邻两点横坐标相等则sp=0,并跳出循环*/break;}elseif(x==X[i]&&y==Y[i]10、11、x==X[i+1]&&y==Y[i+1]){sp=0;/*如果给定点的坐标等于相邻两点任意一点的坐标,则sp=0,并跳出循环*/break;}}sp=sp+t;if(i==M-2)/*最后一点的情况必须单独讨论,同上*/{l=fu12、nc(((X[0]-x)*(Y[M-1]-y)-(Y[0]-y)*(X[M-1]-x))/2);if(l==0){if((X[0]>X[M-1]&&x>X[M-1]&&x13、14、(X[0]X[0]&&xY[0])15、16、(Y[0]>Y[M-1]&&yY[M-1]))){sp=0;break;}elseif(x==X[0]&&y==Y[0]17、18、x==X[M-1]&&y==Y[M-1]19、){sp=0;break;}}sp=sp+l;/*若前面的if都不执行,则sp就是给定点与各个相邻顶点依次围成的真实的面积之和*/}}/*最终得出结论*/if(sp>sn){printf("Thispoint(%f,%f)isoutoftheregion",x,y);}elseif(sp==sn){printf("Thispoint(%f,%f)isintheregion",x,y);}else{printf("Thispoint(%f,%f)isontheedgeoftheregion",x,y);}printf("Whethertocontinu
5、
6、(X[i]X[i]&&x7、eif((X[i]==X[i+1])&&((Y[i]Y[i])8、9、(Y[i]>Y[i+1]&&yY[i+1]))){sp=0;/*如果给定点的纵坐标在相邻两点纵坐标之间,并且相邻两点横坐标相等则sp=0,并跳出循环*/break;}elseif(x==X[i]&&y==Y[i]10、11、x==X[i+1]&&y==Y[i+1]){sp=0;/*如果给定点的坐标等于相邻两点任意一点的坐标,则sp=0,并跳出循环*/break;}}sp=sp+t;if(i==M-2)/*最后一点的情况必须单独讨论,同上*/{l=fu12、nc(((X[0]-x)*(Y[M-1]-y)-(Y[0]-y)*(X[M-1]-x))/2);if(l==0){if((X[0]>X[M-1]&&x>X[M-1]&&x13、14、(X[0]X[0]&&xY[0])15、16、(Y[0]>Y[M-1]&&yY[M-1]))){sp=0;break;}elseif(x==X[0]&&y==Y[0]17、18、x==X[M-1]&&y==Y[M-1]19、){sp=0;break;}}sp=sp+l;/*若前面的if都不执行,则sp就是给定点与各个相邻顶点依次围成的真实的面积之和*/}}/*最终得出结论*/if(sp>sn){printf("Thispoint(%f,%f)isoutoftheregion",x,y);}elseif(sp==sn){printf("Thispoint(%f,%f)isintheregion",x,y);}else{printf("Thispoint(%f,%f)isontheedgeoftheregion",x,y);}printf("Whethertocontinu
7、eif((X[i]==X[i+1])&&((Y[i]Y[i])
8、
9、(Y[i]>Y[i+1]&&yY[i+1]))){sp=0;/*如果给定点的纵坐标在相邻两点纵坐标之间,并且相邻两点横坐标相等则sp=0,并跳出循环*/break;}elseif(x==X[i]&&y==Y[i]
10、
11、x==X[i+1]&&y==Y[i+1]){sp=0;/*如果给定点的坐标等于相邻两点任意一点的坐标,则sp=0,并跳出循环*/break;}}sp=sp+t;if(i==M-2)/*最后一点的情况必须单独讨论,同上*/{l=fu
12、nc(((X[0]-x)*(Y[M-1]-y)-(Y[0]-y)*(X[M-1]-x))/2);if(l==0){if((X[0]>X[M-1]&&x>X[M-1]&&x13、14、(X[0]X[0]&&xY[0])15、16、(Y[0]>Y[M-1]&&yY[M-1]))){sp=0;break;}elseif(x==X[0]&&y==Y[0]17、18、x==X[M-1]&&y==Y[M-1]19、){sp=0;break;}}sp=sp+l;/*若前面的if都不执行,则sp就是给定点与各个相邻顶点依次围成的真实的面积之和*/}}/*最终得出结论*/if(sp>sn){printf("Thispoint(%f,%f)isoutoftheregion",x,y);}elseif(sp==sn){printf("Thispoint(%f,%f)isintheregion",x,y);}else{printf("Thispoint(%f,%f)isontheedgeoftheregion",x,y);}printf("Whethertocontinu
13、
14、(X[0]X[0]&&xY[0])
15、
16、(Y[0]>Y[M-1]&&yY[M-1]))){sp=0;break;}elseif(x==X[0]&&y==Y[0]
17、
18、x==X[M-1]&&y==Y[M-1]
19、){sp=0;break;}}sp=sp+l;/*若前面的if都不执行,则sp就是给定点与各个相邻顶点依次围成的真实的面积之和*/}}/*最终得出结论*/if(sp>sn){printf("Thispoint(%f,%f)isoutoftheregion",x,y);}elseif(sp==sn){printf("Thispoint(%f,%f)isintheregion",x,y);}else{printf("Thispoint(%f,%f)isontheedgeoftheregion",x,y);}printf("Whethertocontinu
此文档下载收益归作者所有