java判断某个点是否在所画多边形/圆形内
本文实例为大家分享了java判断某个点是否在所画范围内的具体代码,供大家参考,具体内容如下
IsPtInPoly.java
packagecom.ardo.util.circle; importjava.util.ArrayList; importjava.util.List; /** *java判断某个点是否在所画范围内(多边形【isPtInPoly】/圆形【distencePC】) *@parampoint检测点 *@parampts多边形的顶点 *@return点在多边形内返回true,否则返回false *@authorardo */ publicclassIsPtInPoly{ /** *判断点是否在多边形内 *@parampoint检测点 *@parampts多边形的顶点 *@return点在多边形内返回true,否则返回false */ publicstaticbooleanisPtInPoly(Point2Dpoint,Listpts){ intN=pts.size(); booleanboundOrVertex=true;//如果点位于多边形的顶点或边上,也算做点在多边形内,直接返回true intintersectCount=0;//crosspointscountofx doubleprecision=2e-10;//浮点类型计算时候与0比较时候的容差 Point2Dp1,p2;//neighbourboundvertices Point2Dp=point;//当前点 p1=pts.get(0);//leftvertex for(inti=1;i<=N;++i){//checkallrays if(p.equals(p1)){ returnboundOrVertex;//pisanvertex } p2=pts.get(i%N);//rightvertex if(p.x Math.max(p1.x,p2.x)){//rayisoutsideofourinterests p1=p2; continue;//nextrayleftpoint } if(p.x>Math.min(p1.x,p2.x)&&p.x =Math.min(p1.y,p2.y)){//overliesonahorizontalray returnboundOrVertex; } if(p1.y==p2.y){//rayisvertical if(p1.y==p.y){//overliesonaverticalray returnboundOrVertex; }else{//beforeray ++intersectCount; } }else{//crosspointontheleftside doublexinters=(p.x-p1.x)*(p2.y-p1.y)/(p2.x-p1.x)+p1.y;//crosspointofy if(Math.abs(p.y-xinters) =Math.min(p1.x,p3.x)&&p.x<=Math.max(p1.x,p3.x)){//p.xliesbetweenp1.x&p3.x ++intersectCount; }else{ intersectCount+=2; } } } p1=p2;//nextrayleftpoint } if(intersectCount%2==0){//偶数在多边形外 returnfalse; }else{//奇数在多边形内 returntrue; } } /** *判断是否在圆形内 *@paramp *@paramc *@return */ publicstaticStringdistencePC(Point2Dp,Circlec){//判断点与圆心之间的距离和圆半径的关系 Strings; doubled2=Math.hypot((p.getX()-c.getCC().getX()),(p.getY()-c.getCC().getY())); System.out.println("d2=="+d2); doubler=c.getR(); if(d2>r){ s="圆外"; }elseif(d2 pts=newArrayList (); pts.add(newPoint2D(116.395,39.910)); pts.add(newPoint2D(116.394,39.914)); pts.add(newPoint2D(116.403,39.920)); pts.add(newPoint2D(116.402,39.914)); pts.add(newPoint2D(116.410,39.913)); if(isPtInPoly(point,pts)){ System.out.println("点在多边形内"); }else{ System.out.println("点在多边形外"); } //测试一个点是否在圆形内 Point2DcenterPoint=newPoint2D(116.404172,39.916605); Circlec=newCircle(); c.setCC(centerPoint); c.setR(0.0056); Strings=distencePC(point,c); System.out.println("点是否在圆内:"+s); } }
Circle.java
/** *圆形类 *@authorardo * */ publicclassCircle{ privatedoubler; privatePoint2Dcc; publicvoidsetR(doublea){ r=a; } publicvoidsetCC(Point2DcenterOfCir){ cc=centerOfCir; } publicdoublegetR(){ returnr; } publicPoint2DgetCC(){ returncc; } }
Point2D.java
publicclassPoint2D{ publicdoublex; publicdoubley; publicPoint2D(doublex,doubley){ super(); this.x=x; this.y=y; } publicdoublegetX(){ returnx; } publicvoidsetX(doublex){ this.x=x; } publicdoublegetY(){ returny; } publicvoidsetY(doubley){ this.y=y; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。