package codechicken.lib.vec; public class Line3 { public static final double tol = 0.0001D; public Vector3 pt1; public Vector3 pt2; public Line3(Vector3 pt1, Vector3 pt2) { this.pt1 = pt1; this.pt2 = pt2; } public Line3() { this(new Vector3(), new Vector3()); } public static boolean intersection2D(Line3 line1, Line3 line2, Vector3 store) { // calculate differences double xD1 = line1.pt2.x - line1.pt1.x; double zD1 = line1.pt2.z - line1.pt1.z; double xD2 = line2.pt2.x - line2.pt1.x; double zD2 = line2.pt2.z - line2.pt1.z; double xD3 = line1.pt1.x - line2.pt1.x; double zD3 = line1.pt1.z - line2.pt1.z; double div = zD2 * xD1 - xD2 * zD1; if (div == 0)//lines are parallel { return false; } double ua = (xD2 * zD3 - zD2 * xD3) / div; store.set(line1.pt1.x + ua * xD1, 0, line1.pt1.z + ua * zD1); if (store.x >= Math.min(line1.pt1.x, line1.pt2.x) - tol && store.x >= Math.min(line2.pt1.x, line2.pt2.x) - tol && store.z >= Math.min(line1.pt1.z, line1.pt2.z) - tol && store.z >= Math.min(line2.pt1.z, line2.pt2.z) - tol && store.x <= Math.max(line1.pt1.x, line1.pt2.x) + tol && store.x <= Math.max(line2.pt1.x, line2.pt2.x) + tol && store.z <= Math.max(line1.pt1.z, line1.pt2.z) + tol && store.z <= Math.max(line2.pt1.z, line2.pt2.z) + tol) { return true; } return false; } }