Fixed polygonal edges with explicit test for point-on-line segment

Closes pull #136
This commit is contained in:
Droolio 2011-08-23 16:01:16 +01:00 committed by zml2008
parent 2af38feadc
commit 26d07b4ca4

View File

@ -302,6 +302,7 @@ public class Polygonal2DRegion implements Region {
int xOld, zOld; int xOld, zOld;
int x1, z1; int x1, z1;
int x2, z2; int x2, z2;
long crossproduct;
int i; int i;
xOld = points.get(npoints - 1).getBlockX(); xOld = points.get(npoints - 1).getBlockX();
@ -325,10 +326,14 @@ public class Polygonal2DRegion implements Region {
z1 = zNew; z1 = zNew;
z2 = zOld; z2 = zOld;
} }
if ((xNew < targetX) == (targetX <= xOld) if (x1 <= targetX && targetX <= x2) {
&& ((long) targetZ - (long) z1) * (long) (x2 - x1) <= ((long) z2 - (long) z1) crossproduct = ((long) targetZ - (long) z1) * (long) (x2 - x1)
* (long) (targetX - x1)) { - ((long) z2 - (long) z1) * (long) (targetX - x1);
inside = !inside; if (crossproduct == 0) {
if ((z1 <= targetZ) == (targetZ <= z2)) return true; //on edge
} else if (crossproduct < 0 && (x1 != targetX)) {
inside = !inside;
}
} }
xOld = xNew; xOld = xNew;
zOld = zNew; zOld = zNew;