点在多边形内的算法

算法:过点向左作射线,射线与多边形相交的点的个数为奇数,则点在多边形内,否则点不在多边形内。(如下图)
点在多边形内的算法_第1张图片

代码:

   public static boolean pointInPoly(Point p,Point[] pointArr){  //判断点是否在多边形内
    double py=p.getY();
    double px=p.getX();                                  //Point是自定义的class
    int numOfCross=0;
    for(int i=0;iMath.max(p1y,p2y)) continue;
        double x = (double)(py - p1y) * (double)(p2x - p1x) / (double)(p2y - p1y) + p1x;
        if(x==px) return true;
        if(x>px) numOfCross++;
    }
    if(numOfCross%2==1) return true;
    else return false;
   }

   //点类
   public class Point {
private double x;
private double y;

public Point() {
    }
    public Point(double x, double y) {
    this.x = x;
    this.y = y;
    }
    public double getX() {
    return x;
}
public void setX(double x) {
    this.x = x;
}
public double getY() {
    return y;
}
public void setY(double y) {
    this.y = y;
}


 }

你可能感兴趣的:(点在多边形内的算法)