/** * 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(); }
public void splitAt(double length, Coordinate endPt) { double actualLen = getConstrainedLength(length); double frac = actualLen / segLen; if (endPt.equals2D(seg.p0)) splitPt = seg.pointAlong(frac); else splitPt = pointAlongReverse(seg, frac); }
public void splitAt(Coordinate pt) { // check that given pt doesn't violate min length double minFrac = minimumLen / segLen; if (pt.distance(seg.p0) < minimumLen) { splitPt = seg.pointAlong(minFrac); return; } if (pt.distance(seg.p1) < minimumLen) { splitPt = pointAlongReverse(seg, minFrac); return; } // passes minimum distance check - use provided point as split pt splitPt = pt; }
public void splitAt(Coordinate pt) { // check that given pt doesn't violate min length double minFrac = minimumLen / segLen; if (pt.distance(seg.p0) < minimumLen) { splitPt = seg.pointAlong(minFrac); return; } if (pt.distance(seg.p1) < minimumLen) { splitPt = pointAlongReverse(seg, minFrac); return; } // passes minimum distance check - use provided point as split pt splitPt = pt; }
/** * 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(); }
public void splitAt(double length, Coordinate endPt) { double actualLen = getConstrainedLength(length); double frac = actualLen / segLen; if (endPt.equals2D(seg.p0)) splitPt = seg.pointAlong(frac); else splitPt = pointAlongReverse(seg, frac); }