• 大小: 9KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: Java
  • 标签: Java  Region  Point  

资源简介

围栏检测算法,使用的是射线法进行的点与围栏间的关系

资源截图

代码片段和文件信息

package Region;
import java.util.List;

/*
 * 围栏点判断类
 */
public class AnalysisPointAndRegion {
private static double _dis =  0.0000000001;

public static Boolean judgeMeetPoint(AyPoint apList apl){
//检测点为空或围栏为空,返回false
if(ap == null || apl == null) return false;
//检测围栏数组
int len = apl.size();
if(len <3) return false;
//交点数
int meetPointCount = 0;
//围栏判断
for(int k = 1 ; k < len; k++){
AyPoint p1 = apl.get(k);
AyPoint p2 = apl.get(k-1);
//初步判断 大范围过滤
if(    (ap.getX() > p1.getX() || ap.getX() < p2.getX() || (ap.getX() > p1.getX() || ap.getX() < p2.getX()))//x坐标在顶点线段范围外
|| (ap.getY() < p1.getY() && ap.getY() < p2.getY()))
continue;
/*
 * 检测点在线段范围内,进行交点计算
 */
//点在线上,认为在围栏内,则可返回true了
if(judgePointInLine(p1p2ap))
return true;
//处理特殊情况,交点是端点的情况 
double temp;
//temp相当于被除数(斜率的分母)
temp = p1.getX() - p2.getX();
if (temp >= -_dis && temp <= _dis){
//处理交点情况 
                double dx = ap.getX() - p1.getX();                                
                if(dx < -_dis || dx > _dis) continue;
                
                int[] indexs = new int[2];
                indexs[0] = 0;
                indexs[1] = 0;
                
                indexs = getNotSame(aplk);
                
                AyPoint lineP1 = apl.get(indexs[0]);
                AyPoint lineP2 = apl.get(indexs[1]);
                
                if( k> indexs[0])
                 break;
                else
                 k = indexs[0] + 1;
                
                if( (ap.getY() > p1.getY())
                 && ( (ap.getX() >= lineP1.getX() && ap.getX() <= lineP2.getX())
                  || (ap.getX() >= lineP2.getX() && ap.getX() <= lineP2.getX())
                    )
                   )
                 meetPointCount++;
            }else{
             double kk;
             double bb;
             double meetPtX;
             double meetPtY;
            
             kk = (p1.getY() - p2.getY()) / (p1.getX() - p2.getX());
             bb = p1.getY() - kk * p1.getX();
            
             meetPtY = kk * ap.getX() + bb;
             meetPtX = ap.getX();
            
             //处理特殊情况,交点是端点的情况             
                double dx = meetPtX - p1.getX();
                double dy = meetPtY - p1.getY();
                double dx2 = meetPtX - p2.getX();
                double dy2 = meetPtY - p2.getX();
                
                if(dx >= -_dis && dx <= _dis && dy >= -_dis && dy <= _dis){
                 AyPoint p3;
                 if(k == 1){
                 p3 = apl.get(len - 2);
                 }else{
                 p3 = apl.get(k - 2);
                 }
                 //提取交点的上下两点分别在垂线的两侧
                 if( (ap.getY() > meetPtY)
                 && ((meetPtX >= p3.getY() && meetPtX <= p2.getX())
                 || (meetPtX >= p2.getX() && meetPtX <= p3

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-12-03 09:31  IsPointInRegion\
     文件         301  2013-12-03 09:31  IsPointInRegion\.classpath
     文件         391  2013-12-03 09:31  IsPointInRegion\.project
     目录           0  2013-12-03 09:31  IsPointInRegion\.settings\
     文件         598  2013-12-03 09:32  IsPointInRegion\.settings\org.eclipse.jdt.core.prefs
     目录           0  2013-12-03 11:27  IsPointInRegion\bin\
     目录           0  2013-12-03 11:27  IsPointInRegion\bin\Region\
     文件        3987  2013-12-03 11:27  IsPointInRegion\bin\Region\AnalysisPointAndRegion.class
     文件         510  2013-12-03 11:27  IsPointInRegion\bin\Region\AyPoint.class
     文件        1593  2013-12-03 11:51  IsPointInRegion\bin\Region\TestRegion.class
     目录           0  2013-12-03 11:27  IsPointInRegion\src\
     目录           0  2013-12-03 11:27  IsPointInRegion\src\Region\
     文件        5331  2013-12-03 11:27  IsPointInRegion\src\Region\AnalysisPointAndRegion.java
     文件         433  2013-12-03 11:27  IsPointInRegion\src\Region\AyPoint.java
     文件         734  2013-12-03 11:51  IsPointInRegion\src\Region\TestRegion.java

评论

共有 条评论