C语言判断点面位置关系系统

上传人:206****923 文档编号:91846422 上传时间:2019-07-02 格式:DOC 页数:11 大小:87.52KB
返回 下载 相关 举报
C语言判断点面位置关系系统_第1页
第1页 / 共11页
C语言判断点面位置关系系统_第2页
第2页 / 共11页
C语言判断点面位置关系系统_第3页
第3页 / 共11页
C语言判断点面位置关系系统_第4页
第4页 / 共11页
C语言判断点面位置关系系统_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《C语言判断点面位置关系系统》由会员分享,可在线阅读,更多相关《C语言判断点面位置关系系统(11页珍藏版)》请在金锄头文库上搜索。

1、C语言判断点面位置关系系统一:程序/*此程序适用于任意复杂程度的单连通和复连通多边形区域*/#include#include#define M 36 /*给定多边形边数*/float XM,YM;float x,y,t,s,Ymin,Ymax,C,D,sn=0,sp=0,xp,yp,l;int i,j=0,k=1;char ch2;void input() /*定义输入坐标函数*/printf(Please input points made of area: n);for(i=0;i0)return n;else return (-n);float Min(float m,float n)

2、/*定义求最小值的函数*/if(m=n)return m;elsereturn n;void simplefun() /*定义判断点是否在凸多边形上、内、外函数*/ xp=(X0+X2)/2; /*起点与第三点的中点横坐标*/yp=(Y0+Y2)/2; /*起点与第三点的中点纵坐标*/printf(xp=%ftyp=%fn,xp,yp); for(i=0;iM-1;i+)t=(Xi-xp)*(Yi+1-yp)-(Yi-yp)*(Xi+1-xp)/2; t=func(t); sn=sn+t; if(i=M-2) sn=sn+func(X0-xp)*(YM-1-yp)-(Y0-yp)*(XM-1-

3、xp)/2); /*求出凸多边形的总面积并输出*/ printf(sn=%fn,sn); for(i=0;iXi+1&xXi+1&xXi)|(XiXi&xXi+1)sp=0; /*如果给定点的横坐标在相邻两点横坐标之间, 则给定点与各个相邻顶点依次围成的面积之和sp赋值为0,并跳出循环*/ break;else if(Xi=Xi+1)&(YiYi+1&yYi)|(YiYi+1&yYi+1)sp=0; /*如果给定点的纵坐标在相邻两点纵坐标之间,并且相邻两点横坐标相等 则sp=0,并跳出循环*/ break;else if(x=Xi&y=Yi|x=Xi+1&y=Yi+1)sp=0; /*如果给定

4、点的坐标等于相邻两点任意一点的坐标,则sp=0,并跳出循环*/ break;sp=sp+t;if(i=M-2) /*最后一点的情况必须单独讨论,同上*/l=func(X0-x)*(YM-1-y)-(Y0-y)*(XM-1-x)/2);if(l=0) if(X0XM-1&xXM-1&xX0)|(X0X0&xXM-1) sp=0; break; else if(X0=XM-1)&(Y0YM-1&yY0)|(Y0YM-1&yYM-1) sp=0; break; else if(x=X0&y=Y0|x=XM-1&y=YM-1) sp=0; break; sp=sp+l; /*若前面的if都不执行,则s

5、p就是给定点与各个相邻顶点依次围成的真实的面积之和*/*最终得出结论*/if(spsn) printf(This point (%f,%f) is out of the regionn,x,y);else if(sp=sn)printf(This point (%f,%f) is in the regionn,x,y);elseprintf(This point (%f,%f) is on the edge of the regionn,x,y); printf(Whether to continue to input one point:);scanf(%s,ch);if(strcmp(ch

6、,y)=0) /*若输入的字符串为y,则递归调用自身,并将sn,sp赋0,清楚以前的记录重新开始。 区域保持不变,然后又重新输入一个点。若不为y,则不执行递归调用*/sn=0;/*变量初始化*/ sp=0;/*变量初始化*/printf(Please continue to input one point:); scanf(%f,%f,&x,&y); simplefun(); void onfun() /*定义判断任意给定点与任意复杂程度的单连通域是否在边上、顶点的函数*/for(i=0;iXi+1&(xXi+1&xXi)|(XiXi&xXi+1)printf(The point is on

7、the edge of the regionn);k=0;/*给定点横坐标x在相邻两点横坐标之间,则将k赋值为0,并跳出循环*/break;else if(Xi=Xi+1)&(YiYi+1&yYi)|(YiYi+1&yYi+1)printf(The point is on the edge of the regionn);k=0;/*相邻两点横坐标相等,并且给定点纵坐标y在相邻两点纵坐标之间,则将k赋值为0,并跳出循环*/break;else if(x=Xi&y=Yi|x=Xi+1&y=Yi+1)printf(The point is on the point of the regionn);

8、k=0;/*给定点坐标与相邻两点任意一点坐标相同,则将k赋值为0,并跳出循环*/break;if(i=M-2)/*最后一点的情况要单独讨论,与上面同理*/t=(XM-1-x)*(Y0-y)-(YM-1-y)*(X0-x)/2;s=func(t);if(s=0) if(X0XM-1&(xXM-1&xX0)|(X0X0&xXM-1) printf(The point is on the edge of the regionn); k=0; break;else if(X0=XM-1)&(Y0YM-1&yY0)|(Y0YM-1&yYM-1) printf(The point is on the ed

9、ge of the regionn); k=0; break; else if(x=X0&y=Y0|x=XM-1&y=YM-1) printf(The point is on the point of the regionn); k=0; break;void out_incarefulfun()/*定义判断给定一点是否在任意单连通区域内、外的函数*/Ymin=Y0;Ymax=Y0;for(i=1;iM;i+)Ymin=Min(Ymin,Yi);/*找出构成区域的点中的最大和最小的纵坐标*/Ymax=Max(Ymax,Yi);if(k)/*k为1则执行*/for(i=0;iM-1;i+)if(Yiy|Yiy&Yi+10)/*过给定点(x,y)的水平线与相邻

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号