mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-11-16 17:16:11 +00:00
Fixed polygonal edges with explicit test for point-on-line segment
Closes pull #136
This commit is contained in:
parent
2af38feadc
commit
26d07b4ca4
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user