private static double distanceToSeg(Coordinate p, Coordinate p0, Coordinate p1) { distSeg.p0 = p0; distSeg.p1 = p1; double segDist = distSeg.distance(p); // robust calculation of zero distance if (Orientation.index(p0, p1, p) == Orientation.COLLINEAR) segDist = 0.0; return segDist; } }
private static boolean isPointNearButNotOnSeg(Coordinate p, Coordinate p0, Coordinate p1, double distTol) { // don't rely on segment distance algorithm to correctly compute zero distance // on segment if (Orientation.index(p0, p1, p) == Orientation.COLLINEAR) return false; // compute actual distance distSeg.p0 = p0; distSeg.p1 = p1; double segDist = distSeg.distance(p); if (segDist > distTol) return false; return true; }
private int findFurthestPoint(Coordinate[] pts, int i, int j, double[] maxDistance) { LineSegment seg = new LineSegment(); seg.p0 = pts[i]; seg.p1 = pts[j]; double maxDist = -1.0; int maxIndex = i; for (int k = i + 1; k < j; k++) { Coordinate midPt = pts[k]; double distance = seg.distance(midPt); if (distance > maxDist) { maxDist = distance; maxIndex = k; } } maxDistance[0] = maxDist; return maxIndex; }
private void simplifySection(int i, int j) { if((i+1) == j) { return; } seg.p0 = pts[i]; seg.p1 = pts[j]; double maxDistance = -1.0; int maxIndex = i; for (int k = i + 1; k < j; k++) { double distance = seg.distance(pts[k]); if (distance > maxDistance) { maxDistance = distance; maxIndex = k; } } if (maxDistance <= distanceTolerance) { for(int k = i + 1; k < j; k++) { usePt[k] = false; } } else { simplifySection(i, maxIndex); simplifySection(maxIndex, j); } }
private void findSegmentLocations(Stack path, Geometry compGeom, CoordinateSequence seq, List locations) { LineSegment seg = new LineSegment(); for (int i = 0; i < seq.size() - 1; i++) { seg.p0 = seq.getCoordinate(i); seg.p1 = seq.getCoordinate(i+1); double dist = seg.distance(queryPt); if (dist <= tolerance) locations.add(new GeometryLocation(parentGeom, compGeom, toIntArray(path), i, false, seg.p0)); } }
/** * Tests whether a {@link Coordinate} lies on a {@link QuadEdge}, up to a * tolerance determined by the subdivision tolerance. * * @param e * a QuadEdge * @param p * a point * @return true if the vertex lies on the edge */ public boolean isOnEdge(QuadEdge e, Coordinate p) { seg.setCoordinates(e.orig().getCoordinate(), e.dest().getCoordinate()); double dist = seg.distance(p); // heuristic (hack?) return dist < edgeCoincidenceTolerance; }
private boolean isWithinToleranceOfBoundary(Coordinate pt) { for (int i = 0; i < linework.getNumGeometries(); i++) { LineString line = (LineString) linework.getGeometryN(i); CoordinateSequence seq = line.getCoordinateSequence(); for (int j = 0; j < seq.size() - 1; j++) { seq.getCoordinate(j, seg.p0); seq.getCoordinate(j + 1, seg.p1); double dist = seg.distance(pt); if (dist <= boundaryDistanceTolerance) return true; } } return false; } }
private boolean isSnapped(Coordinate v, Coordinate p0, Coordinate p1) { if (v.equals2D(p0)) return true; if (v.equals2D(p1)) return true; LineSegment seg = new LineSegment(p0, p1); double dist = seg.distance(v); if (dist < SNAP_TOLERANCE / 2.05) return false; return true; }
double segDist = seg.distance(testPt); if (segDist < tolerance) { nearestPt = seg.closestPoint(testPt);
double dist = seg.distance(snapPt); if (dist < snapTolerance && dist < minDist) { minDist = dist;
private double indexOfFromStart(Coordinate inputPt, double minIndex) { double minDistance = Double.MAX_VALUE; double ptMeasure = minIndex; double segmentStartMeasure = 0.0; LineSegment seg = new LineSegment(); LinearIterator it = new LinearIterator(linearGeom); while (it.hasNext()) { if (! it.isEndOfLine()) { seg.p0 = it.getSegmentStart(); seg.p1 = it.getSegmentEnd(); double segDistance = seg.distance(inputPt); double segMeasureToPt = segmentNearestMeasure(seg, inputPt, segmentStartMeasure); if (segDistance < minDistance && segMeasureToPt > minIndex) { ptMeasure = segMeasureToPt; minDistance = segDistance; } segmentStartMeasure += seg.getLength(); } it.next(); } return ptMeasure; }
seg.p0 = it.getSegmentStart(); seg.p1 = it.getSegmentEnd(); double segDistance = seg.distance(inputPt); double segFrac = seg.segmentFraction(inputPt);
Coordinate intersection = CoordinateUtils.vectorIntersection(inCenter, vector, side.p0, new Vector3D(side.p0,side.p1).normalize()); double distInters = intersection == null ? Double.MAX_VALUE : side.distance(intersection); if(intersection != null && distInters < nearestIntersection) { pointIntersection = new Coordinate(intersection.x, intersection.y,