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 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 compareHorizontal2_(Line line_1, Line line_2) { if (line_1.getEndY() == line_2.getEndY() && line_1.getEndX() == line_2.getEndX() && line_1.getStartY() == line_2.getStartY() && line_1.getStartX() == line_2.getStartX()) {// both lines // coincide if (m_b_is_simple) return errorCoincident(); return 0; } else return errorCracking(); }
int compareHorizontal2_(Line line_1, Line line_2) { if (line_1.getEndY() == line_2.getEndY() && line_1.getEndX() == line_2.getEndX() && line_1.getStartY() == line_2.getStartY() && line_1.getStartX() == line_2.getStartX()) {// both lines // coincide if (m_b_is_simple) return errorCoincident(); return 0; } else return errorCracking(); }
private static Point2D computeLineCentroid(Line line) { return new Point2D((line.getEndX() - line.getStartX()) / 2, (line.getEndY() - line.getStartY()) / 2); }
private static Point2D computeLineCentroid(Line line) { return new Point2D((line.getEndX() - line.getStartX()) / 2, (line.getEndY() - line.getStartY()) / 2); }
int compareHorizontal1_(Line line_1, Line line_2) { // Two most important cases of connecting edges if (line_1.getStartY() == line_2.getStartY() && line_1.getStartX() == line_2.getStartX()) { return compareHorizontal1Case1_(line_1, line_2); } if (line_1.getEndY() == line_2.getEndY() && line_1.getEndX() == line_2.getEndX()) { return compareHorizontal1Case2_(line_1, line_2); } return compareHorizontal1Case3_(line_1, line_2); }
int compareHorizontal1_(Line line_1, Line line_2) { // Two most important cases of connecting edges if (line_1.getStartY() == line_2.getStartY() && line_1.getStartX() == line_2.getStartX()) { return compareHorizontal1Case1_(line_1, line_2); } if (line_1.getEndY() == line_2.getEndY() && line_1.getEndX() == line_2.getEndX()) { return compareHorizontal1Case2_(line_1, line_2); } return compareHorizontal1Case3_(line_1, line_2); }
void initSimpleEdge_(SweepComparator.SimpleEdge se, int vertex) { se.m_segment = m_shape.getSegment(vertex); se.m_b_curve = se.m_segment != null; if (!se.m_b_curve) { m_shape.queryLineConnector(vertex, se.m_line); se.m_segment = se.m_line; se.m_env.setCoordsNoNaN_(se.m_line.getStartX(), se.m_line.getEndX()); se.m_env.vmax += m_tolerance; se.m_line.orientBottomUp_(); se.m_b_horizontal = se.m_line.getEndY() == se.m_line.getStartY(); if (!se.m_b_horizontal) { se.m_dxdy = (se.m_line.getEndX() - se.m_line.getStartX()) / (se.m_line.getEndY() - se.m_line.getStartY()); } } else { // se.m_segment = se.m_segment_sptr.get(); } }
void initSimpleEdge_(SweepComparator.SimpleEdge se, int vertex) { se.m_segment = m_shape.getSegment(vertex); se.m_b_curve = se.m_segment != null; if (!se.m_b_curve) { m_shape.queryLineConnector(vertex, se.m_line); se.m_segment = se.m_line; se.m_env.setCoordsNoNaN_(se.m_line.getStartX(), se.m_line.getEndX()); se.m_env.vmax += m_tolerance; se.m_line.orientBottomUp_(); se.m_b_horizontal = se.m_line.getEndY() == se.m_line.getStartY(); if (!se.m_b_horizontal) { se.m_dxdy = (se.m_line.getEndX() - se.m_line.getStartX()) / (se.m_line.getEndY() - se.m_line.getStartY()); } } else { // se.m_segment = se.m_segment_sptr.get(); } }
l.setStartY( l.getStartY() + dy ); l.setEndX( l.getEndX() + dx ); l.setEndY( l.getEndY() + dy ); x = tx; y = ty;
public void setGeometryByValue(Line ln) throws ObjectStreamException { try { attribs = null; if (ln == null) { descriptionBitMask = -1; } VertexDescription vd = ln.getDescription(); descriptionBitMask = vd.m_semanticsBitArray; attribs = new double[vd.getTotalComponentCount() * 2]; attribs[0] = ln.getStartX(); attribs[1] = ln.getStartY(); attribs[2] = ln.getEndX(); attribs[3] = ln.getEndY(); int index = 4; for (int i = 1, n = vd.getAttributeCount(); i < n; i++) { int semantics = vd.getSemantics(i); int comps = VertexDescription.getComponentCount(semantics); for (int ord = 0; ord < comps; ord++) { attribs[index++] = ln.getStartAttributeAsDbl(semantics, ord); attribs[index++] = ln.getEndAttributeAsDbl(semantics, ord); } } } catch (Exception ex) { throw new InvalidObjectException("Cannot serialize this geometry"); } } }
public void setGeometryByValue(Line ln) throws ObjectStreamException { try { attribs = null; if (ln == null) { descriptionBitMask = -1; } VertexDescription vd = ln.getDescription(); descriptionBitMask = vd.m_semanticsBitArray; attribs = new double[vd.getTotalComponentCount() * 2]; attribs[0] = ln.getStartX(); attribs[1] = ln.getStartY(); attribs[2] = ln.getEndX(); attribs[3] = ln.getEndY(); int index = 4; for (int i = 1, n = vd.getAttributeCount(); i < n; i++) { int semantics = vd.getSemantics(i); int comps = VertexDescription.getComponentCount(semantics); for (int ord = 0; ord < comps; ord++) { attribs[index++] = ln.getStartAttributeAsDbl(semantics, ord); attribs[index++] = ln.getEndAttributeAsDbl(semantics, ord); } } } catch (Exception ex) { throw new InvalidObjectException("Cannot serialize this geometry"); } } }
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; }
boolean _projectionIntersectHelper(Line other, Point2D v, boolean bStart) { // v is the vector in the direction of this line == end - start. double orgX = bStart ? m_xStart : m_xEnd; double orgY = bStart ? m_yStart : m_yEnd; Point2D m = new Point2D(); m.x = other.getEndX() - orgX; m.y = other.getEndY() - orgY; double dot = v.dotProduct(m); double dotError = 3 * NumberUtils.doubleEps() * v._dotProductAbs(m); if (dot > dotError) { m.x = other.getStartX() - orgX; m.y = other.getStartY() - orgY; double dot2 = v.dotProduct(m); double dotError2 = 3 * NumberUtils.doubleEps() * v._dotProductAbs(m); return dot2 <= dotError2; } return true; }
boolean _projectionIntersectHelper(Line other, Point2D v, boolean bStart) { // v is the vector in the direction of this line == end - start. double orgX = bStart ? m_xStart : m_xEnd; double orgY = bStart ? m_yStart : m_yEnd; Point2D m = new Point2D(); m.x = other.getEndX() - orgX; m.y = other.getEndY() - orgY; double dot = v.dotProduct(m); double dotError = 3 * NumberUtils.doubleEps() * v._dotProductAbs(m); if (dot > dotError) { m.x = other.getStartX() - orgX; m.y = other.getStartY() - orgY; double dot2 = v.dotProduct(m); double dotError2 = 3 * NumberUtils.doubleEps() * v._dotProductAbs(m); return dot2 <= dotError2; } return true; }
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; }