コード例 #1
0
ファイル: Distance3DOp.cs プロジェクト: klosejay/Gisoft.Map
        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;
                }
            }
        }
コード例 #2
0
ファイル: Distance3DOp.cs プロジェクト: klosejay/Gisoft.Map
        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;
                    }
                }
            }
        }
コード例 #3
0
ファイル: Distance3DOp.cs プロジェクト: klosejay/Gisoft.Map
        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);
            }
        }