private void ComputeMinDistanceLinePoint(ILineString line, IPoint point, bool flip) { var lineCoord = line.Coordinates; var coord = point.Coordinate; // brute force approach! for (int i = 0; i < lineCoord.Length - 1; i++) { var dist = CGAlgorithms3D.DistancePointSegment(coord, lineCoord[i], lineCoord[i + 1]); if (dist < _minDistance) { var seg = new LineSegment(lineCoord[i], lineCoord[i + 1]); var segClosestPoint = seg.ClosestPoint(coord); UpdateDistance(dist, new GeometryLocation(line, i, segClosestPoint), new GeometryLocation(point, 0, coord), flip); } if (_isDone) { return; } } }
private void ComputeMinDistanceLineLine(ILineString line0, ILineString line1, bool flip) { var coord0 = line0.Coordinates; var coord1 = line1.Coordinates; // brute force approach! for (var i = 0; i < coord0.Length - 1; i++) { for (int j = 0; j < coord1.Length - 1; j++) { var dist = CGAlgorithms3D.DistanceSegmentSegment(coord0[i], coord0[i + 1], coord1[j], coord1[j + 1]); if (dist < _minDistance) { _minDistance = dist; // TODO: compute closest pts in 3D var seg0 = new LineSegment(coord0[i], coord0[i + 1]); var seg1 = new LineSegment(coord1[j], coord1[j + 1]); var closestPt = seg0.ClosestPoints(seg1); UpdateDistance(dist, new GeometryLocation(line0, i, closestPt[0]), new GeometryLocation(line1, j, closestPt[1]), flip ); } if (_isDone) { return; } } } }
private void ComputeMinDistancePointPoint(IPoint point0, IPoint point1, bool flip) { var dist = CGAlgorithms3D.Distance( point0.Coordinate, point1.Coordinate); if (dist < _minDistance) { UpdateDistance(dist, new GeometryLocation(point0, 0, point0.Coordinate), new GeometryLocation(point1, 0, point1.Coordinate), flip); } }