判断点在多边形内部的方法(Java版)
2014年02月02日
⁄ 综合
⁄ 共 1014字 ⁄ 字号
小 中 大
-
-
-
-
-
-
public boolean containsPoint(BYPoint point) {
-
int verticesCount = vertices.size();
-
int nCross = 0;
-
for (int i = 0; i < verticesCount; ++ i) {
-
BYPoint p1 = vertices.get(i);
-
BYPoint p2 = vertices.get((i + 1) % verticesCount);
-
-
-
if ( p1.getY() == p2.getY() ) {
-
continue;
-
}
-
if ( point.getY() < Math.min(p1.getY(), p2.getY()) ) {
-
continue;
-
}
-
if ( point.getY() >= Math.max(p1.getY(), p2.getY()) ) {
-
continue;
-
}
-
-
float x = (point.getY() - p1.getY()) * (p2.getX() - p1.getX())
-
/ (p2.getY() - p1.getY()) + p1.getX();
-
if ( x > point.getX() ) {
-
nCross++;
-
}
-
}
-
-
return (nCross%2==1);
-
}