/** * Computes the intersection point between this segment and another one. * * @param s a segment * @return the intersection point, or <code>null</code> if there is none */ public Coordinate intersection(Segment s) { return ls.intersection(s.getLineSegment()); }
/** * Determines whether two segments are topologically equal. * I.e. equal up to orientation. * * @param s a segment * @return true if the segments are topologically equal */ public boolean equalsTopo(Segment s) { return ls.equalsTopo(s.getLineSegment()); }
/** * Computes a split point which is the projection of the encroaching point on the segment * * @param seg * @param encroachPt * @return a split point on the segment */ public static Coordinate projectedSplitPoint(Segment seg, Coordinate encroachPt) { LineSegment lineSeg = seg.getLineSegment(); Coordinate projPt = lineSeg.project(encroachPt); return projPt; } }
/** * A basic strategy for finding split points when nothing extra is known about the geometry of * the situation. * * @param seg the encroached segment * @param encroachPt the encroaching point * @return the point at which to split the encroached segment */ public Coordinate findSplitPoint(Segment seg, Coordinate encroachPt) { LineSegment lineSeg = seg.getLineSegment(); double segLen = lineSeg.getLength(); double midPtLen = segLen / 2; SplitSegment splitSeg = new SplitSegment(lineSeg); Coordinate projPt = projectedSplitPoint(seg, encroachPt); /** * Compute the largest diameter (length) that will produce a split segment which is not * still encroached upon by the encroaching point (The length is reduced slightly by a * safety factor) */ double nonEncroachDiam = projPt.distance(encroachPt) * 2 * 0.8; // .99; double maxSplitLen = nonEncroachDiam; if (maxSplitLen > midPtLen) { maxSplitLen = midPtLen; } splitSeg.setMinimumLength(maxSplitLen); splitSeg.splitAt(projPt); return splitSeg.getSplitPoint(); }
/** * Computes the intersection point between this segment and another one. * * @param s a segment * @return the intersection point, or <code>null</code> if there is none */ public Coordinate intersection(Segment s) { return ls.intersection(s.getLineSegment()); }
/** * Determines whether two segments are topologically equal. * I.e. equal up to orientation. * * @param s a segment * @return true if the segments are topologically equal */ public boolean equalsTopo(Segment s) { return ls.equalsTopo(s.getLineSegment()); }
/** * Computes a split point which is the projection of the encroaching point on the segment * * @param seg * @param encroachPt * @return a split point on the segment */ public static Coordinate projectedSplitPoint(Segment seg, Coordinate encroachPt) { LineSegment lineSeg = seg.getLineSegment(); Coordinate projPt = lineSeg.project(encroachPt); return projPt; } }
/** * A basic strategy for finding split points when nothing extra is known about the geometry of * the situation. * * @param seg the encroached segment * @param encroachPt the encroaching point * @return the point at which to split the encroached segment */ public Coordinate findSplitPoint(Segment seg, Coordinate encroachPt) { LineSegment lineSeg = seg.getLineSegment(); double segLen = lineSeg.getLength(); double midPtLen = segLen / 2; SplitSegment splitSeg = new SplitSegment(lineSeg); Coordinate projPt = projectedSplitPoint(seg, encroachPt); /** * Compute the largest diameter (length) that will produce a split segment which is not * still encroached upon by the encroaching point (The length is reduced slightly by a * safety factor) */ double nonEncroachDiam = projPt.distance(encroachPt) * 2 * 0.8; // .99; double maxSplitLen = nonEncroachDiam; if (maxSplitLen > midPtLen) { maxSplitLen = midPtLen; } splitSeg.setMinimumLength(maxSplitLen); splitSeg.splitAt(projPt); return splitSeg.getSplitPoint(); }