/** * Returns True if point and the segment intersect (not disjoint) for the * given tolerance. */ @Override public boolean isIntersecting(Point2D pt, double tolerance) { return _isIntersectingPoint(pt, tolerance, false); }
/** * Returns True if point and the segment intersect (not disjoint) for the * given tolerance. */ @Override public boolean isIntersecting(Point2D pt, double tolerance) { return _isIntersectingPoint(pt, tolerance, false); }
if (line2._isIntersectingPoint(line1.getStartXY(), tolerance, true)) return 1;// return true; if (line2._isIntersectingPoint(line1.getEndXY(), tolerance, true)) return 1;// return true; if (line1._isIntersectingPoint(line2.getStartXY(), tolerance, true)) return 1;// return true; if (line1._isIntersectingPoint(line2.getEndXY(), tolerance, true)) return 1;// return true;
if (line2._isIntersectingPoint(line1.getStartXY(), tolerance, true)) return 1;// return true; if (line2._isIntersectingPoint(line1.getEndXY(), tolerance, true)) return 1;// return true; if (line1._isIntersectingPoint(line2.getStartXY(), tolerance, true)) return 1;// return true; if (line1._isIntersectingPoint(line2.getEndXY(), tolerance, true)) return 1;// return true;
int compareHorizontal1Case3_(Line line_1, Line line_2) { Point2D v0 = new Point2D(); v0.sub(line_2.getEndXY(), line_2.getStartXY()); v0.rightPerpendicular(); v0.normalize(); Point2D v_1 = new Point2D(); v_1.sub(line_1.getStartXY(), line_2.getStartXY()); Point2D v_2 = new Point2D(); v_2.sub(line_1.getEndXY(), line_2.getStartXY()); double d_1 = v_1.dotProduct(v0); double d_2 = v_2.dotProduct(v0); double ad1 = Math.abs(d_1); double ad2 = Math.abs(d_2); if (ad1 < ad2) { if (ad1 < m_tolerance_10 && line_2._isIntersectingPoint(line_1.getStartXY(), m_tolerance, true)) return errorCracking(); } else { if (ad2 < m_tolerance_10 && line_2._isIntersectingPoint(line_1.getEndXY(), m_tolerance, true)) return errorCracking(); } if (d_1 < 0 && d_2 < 0) return -1; if (d_1 > 0 && d_2 > 0) return 1; return errorCracking(); }
int compareHorizontal1Case3_(Line line_1, Line line_2) { Point2D v0 = new Point2D(); v0.sub(line_2.getEndXY(), line_2.getStartXY()); v0.rightPerpendicular(); v0.normalize(); Point2D v_1 = new Point2D(); v_1.sub(line_1.getStartXY(), line_2.getStartXY()); Point2D v_2 = new Point2D(); v_2.sub(line_1.getEndXY(), line_2.getStartXY()); double d_1 = v_1.dotProduct(v0); double d_2 = v_2.dotProduct(v0); double ad1 = Math.abs(d_1); double ad2 = Math.abs(d_2); if (ad1 < ad2) { if (ad1 < m_tolerance_10 && line_2._isIntersectingPoint(line_1.getStartXY(), m_tolerance, true)) return errorCracking(); } else { if (ad2 < m_tolerance_10 && line_2._isIntersectingPoint(line_1.getEndXY(), m_tolerance, true)) return errorCracking(); } if (d_1 < 0 && d_2 < 0) return -1; if (d_1 > 0 && d_2 > 0) return 1; return errorCracking(); }
int compareNonHorizontalLowerEnd_(SimpleEdge line_1, SimpleEdge line_2) { int sign = 1; if (line_1.m_line.getStartY() < line_2.m_line.getStartY()) { sign = -1; SimpleEdge tmp = line_1; line_1 = line_2; line_2 = tmp; } Line l1 = line_1.m_line; Line l2 = line_2.m_line; // Now line_1 has Start point higher than line_2 startpoint. double x_1 = l1.getStartX() - l2.getStartX(); double x2 = line_2.m_dxdy * (l1.getStartY() - l2.getStartY()); double tol = m_tolerance_10; if (x_1 < x2 - tol) return -sign; else if (x_1 > x2 + tol) return sign; else // Possible problem { if (l2._isIntersectingPoint(l1.getStartXY(), m_tolerance, true)) return errorCracking(); return x_1 < x2 ? -sign : sign; } }
int compareNonHorizontalUpperEnd_(SimpleEdge line_1, SimpleEdge line_2) { int sign = 1; if (line_2.m_line.getEndY() < line_1.m_line.getEndY()) { sign = -1; SimpleEdge tmp = line_1; line_1 = line_2; line_2 = tmp; } Line l1 = line_1.m_line; Line l2 = line_2.m_line; // Now line_1 has End point lower than line_2 endpoint. double x_1 = l1.getEndX() - l2.getStartX(); double x2 = line_2.m_dxdy * (l1.getEndY() - l2.getStartY()); double tol = m_tolerance_10; if (x_1 < x2 - tol) return -sign; else if (x_1 > x2 + tol) return sign; else // Possible problem { if (l2._isIntersectingPoint(l1.getEndXY(), m_tolerance, true)) return errorCracking(); return x_1 < x2 ? -sign : sign; } }
int compareNonHorizontalLowerEnd_(SimpleEdge line_1, SimpleEdge line_2) { int sign = 1; if (line_1.m_line.getStartY() < line_2.m_line.getStartY()) { sign = -1; SimpleEdge tmp = line_1; line_1 = line_2; line_2 = tmp; } Line l1 = line_1.m_line; Line l2 = line_2.m_line; // Now line_1 has Start point higher than line_2 startpoint. double x_1 = l1.getStartX() - l2.getStartX(); double x2 = line_2.m_dxdy * (l1.getStartY() - l2.getStartY()); double tol = m_tolerance_10; if (x_1 < x2 - tol) return -sign; else if (x_1 > x2 + tol) return sign; else // Possible problem { if (l2._isIntersectingPoint(l1.getStartXY(), m_tolerance, true)) return errorCracking(); return x_1 < x2 ? -sign : sign; } }
int compareNonHorizontalUpperEnd_(SimpleEdge line_1, SimpleEdge line_2) { int sign = 1; if (line_2.m_line.getEndY() < line_1.m_line.getEndY()) { sign = -1; SimpleEdge tmp = line_1; line_1 = line_2; line_2 = tmp; } Line l1 = line_1.m_line; Line l2 = line_2.m_line; // Now line_1 has End point lower than line_2 endpoint. double x_1 = l1.getEndX() - l2.getStartX(); double x2 = line_2.m_dxdy * (l1.getEndY() - l2.getStartY()); double tol = m_tolerance_10; if (x_1 < x2 - tol) return -sign; else if (x_1 > x2 + tol) return sign; else // Possible problem { if (l2._isIntersectingPoint(l1.getEndXY(), m_tolerance, true)) return errorCracking(); return x_1 < x2 ? -sign : sign; } }
int compareHorizontal1Case2_(Line line_1, Line line_2) { // -----------------+ // / // / // / // line_2 goes up and below line_1. line_1 is horizontal connected at // the end to the line_2 end. if (line_1.getStartX() < line_2.getStartX()) { if (line_2.getEndX() > line_2.getStartX() && line_2.getEndY() - line_2.getStartY() < 2 * m_tolerance && line_1._isIntersectingPoint(line_2.getEndXY(), m_tolerance, true)) return errorCracking(); } else { // --+ // / // / // / // Avoid expensive is_intersecting_ by providing a simple estimate. double dydx = (line_2.getEndY() - line_2.getStartY()) / (line_2.getEndX() - line_2.getStartX()); double d = dydx * (line_1.getStartX() - line_1.getEndX()); if (d < m_tolerance_10 && line_2._isIntersectingPoint(line_1.getStartXY(), m_tolerance, true)) return errorCracking(); } return -1; }
int compareHorizontal1Case2_(Line line_1, Line line_2) { // -----------------+ // / // / // / // line_2 goes up and below line_1. line_1 is horizontal connected at // the end to the line_2 end. if (line_1.getStartX() < line_2.getStartX()) { if (line_2.getEndX() > line_2.getStartX() && line_2.getEndY() - line_2.getStartY() < 2 * m_tolerance && line_1._isIntersectingPoint(line_2.getEndXY(), m_tolerance, true)) return errorCracking(); } else { // --+ // / // / // / // Avoid expensive is_intersecting_ by providing a simple estimate. double dydx = (line_2.getEndY() - line_2.getStartY()) / (line_2.getEndX() - line_2.getStartX()); double d = dydx * (line_1.getStartX() - line_1.getEndX()); if (d < m_tolerance_10 && line_2._isIntersectingPoint(line_1.getStartXY(), m_tolerance, true)) return errorCracking(); } return -1; }
int compareHorizontal1Case1_(Line line_1, Line line_2) { // line_2 goes up and line_1 is horizontal connected at the start going // to the right. if (line_1.getEndX() > line_2.getEndX()) { // / // / // +------------------ if (line_2.getEndX() > line_2.getStartX() && line_2.getEndY() - line_2.getStartY() < 2 * m_tolerance && line_1._isIntersectingPoint(line_2.getEndXY(), m_tolerance, true)) return errorCracking(); } else { // / // / // / // +-- assert (line_2.getEndX() - line_2.getStartX() != 0); // Note: line_2 cannot be vertical here // Avoid expensive is_intersecting_ by providing a simple estimate. double dydx = (line_2.getEndY() - line_2.getStartY()) / (line_2.getEndX() - line_2.getStartX()); double d = dydx * (line_1.getEndX() - line_1.getStartX()); if (d < m_tolerance_10 && line_2._isIntersectingPoint(line_1.getEndXY(), m_tolerance, true)) return errorCracking(); } return 1; }
int compareHorizontal1Case1_(Line line_1, Line line_2) { // line_2 goes up and line_1 is horizontal connected at the start going // to the right. if (line_1.getEndX() > line_2.getEndX()) { // / // / // +------------------ if (line_2.getEndX() > line_2.getStartX() && line_2.getEndY() - line_2.getStartY() < 2 * m_tolerance && line_1._isIntersectingPoint(line_2.getEndXY(), m_tolerance, true)) return errorCracking(); } else { // / // / // / // +-- assert (line_2.getEndX() - line_2.getStartX() != 0); // Note: line_2 cannot be vertical here // Avoid expensive is_intersecting_ by providing a simple estimate. double dydx = (line_2.getEndY() - line_2.getStartY()) / (line_2.getEndX() - line_2.getStartX()); double d = dydx * (line_1.getEndX() - line_1.getStartX()); if (d < m_tolerance_10 && line_2._isIntersectingPoint(line_1.getEndXY(), m_tolerance, true)) return errorCracking(); } return 1; }