コード例 #1
0
        /// <summary>
        /// Chen and Guevara 77
        /// </summary>
        /// <param name="numberOfPoints"></param>
        /// <returns></returns>
        public AttributedPointCollection SelectPointsBaesdOnCAG(int numberOfPoints)
        {
            int numberOfRow = this.NumberOfRows;

            int numberOfColumns = this.NumberOfColumns;

            IndexValue <double>[] significanceValues = new IndexValue <double> [numberOfRow * numberOfColumns];

            for (int i = 1; i < numberOfRow - 1; i++)
            {
                for (int j = 1; j < numberOfColumns - 1; j++)
                {
                    double first = CalculateSecondDifference(i, j, RasterDirection.EastWest);

                    double second = CalculateSecondDifference(i, j, RasterDirection.SouthNorth);

                    double third = CalculateSecondDifference(i, j, RasterDirection.NorthernWestSouthernEast);

                    double fourth = CalculateSecondDifference(i, j, RasterDirection.SouthernWestNorthernEast);

                    significanceValues[i * numberOfColumns + j] =
                        new IndexValue <double>(i * numberOfColumns + j, first + second + third + fourth);
                }
            }

            IndexValue <double>[] sortedSignificanceValues = SortAlgorithm.Heapsort <IndexValue <double> >(significanceValues, SortDirection.Ascending);

            AttributedPointCollection irregularPoints = new AttributedPointCollection();

            for (int i = 0; i < numberOfPoints; i++)
            {
                int row = (int)Math.Floor((double)sortedSignificanceValues[i].Index / numberOfColumns);

                int column = sortedSignificanceValues[i].Index % numberOfColumns;

                irregularPoints.Add(this.GetPoint(row, column));
            }

            //AddBorder
            irregularPoints.Add(this.LowerLeft);

            irregularPoints.Add(this.LoweRight);

            irregularPoints.Add(this.UpperLeft);

            irregularPoints.Add(this.UppeRight);

            return(irregularPoints);
        }
コード例 #2
0
        public IrregularDtm(AttributedPointCollection collection)
        {
            this.collection = collection;

            //PointCollection c = new PointCollection();

            //for (int i = 0; i < collection.Count; i++)
            //{
            //    c.Add(new Point(collection[i].X, collection[i].Y));
            //}

            this.triangulation = new DelaunayTriangulation(this.collection);

            currenTriangle = triangulation.triangles[0];
        }
コード例 #3
0
        public IrregularDtm(double[] east, double[] north, double[] value)
        {
            try
            {
                this.collection = new AttributedPointCollection(new List <double>(east),
                                                                new List <double>(north),
                                                                new List <double>(value));

                triangulation = new DelaunayTriangulation(collection);

                currenTriangle = triangulation.triangles[0];
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #4
0
        public AttributedPointCollection SelectPointsBasedOnLi(double threshold)
        {
            int numberOfRow = this.NumberOfRows;

            int numberOfColumns = this.NumberOfColumns;

            AttributedPointCollection irregularPoints = new AttributedPointCollection();

            Matrix values = this.values.Clone();

            for (int i = 1; i < numberOfRow - 1; i++)
            {
                for (int j = 1; j < numberOfColumns - 1; j++)
                {
                    double firstDifference = values[i, j] - ((values[i, j - 1] + values[i, j + 1]) / 2);

                    double secondDifference = values[i, j] - ((values[i - 1, j] + values[i + 1, j]) / 2);

                    double thirdDifference = values[i, j] - ((values[i + 1, j - 1] + values[i - 1, j + 1]) / 2);

                    double fourthDifference = values[i, j] - ((values[i - 1, j - 1] + values[i + 1, j + 1]) / 2);

                    if ((Math.Abs(firstDifference) + Math.Abs(secondDifference) + Math.Abs(thirdDifference) + Math.Abs(fourthDifference)) / 4 > threshold)
                    {
                        irregularPoints.Add(this.GetPoint(i, j));
                    }
                    else
                    {
                        values[i, j] = (4 * values[i, j] - firstDifference - secondDifference - thirdDifference - fourthDifference) / 4;
                    }
                }
            }

            //AddBorder
            irregularPoints.Add(this.LowerLeft);

            irregularPoints.Add(this.LoweRight);

            irregularPoints.Add(this.UpperLeft);

            irregularPoints.Add(this.UppeRight);

            return(irregularPoints);
        }
コード例 #5
0
        public IrregularDtm ToIrregularDtmBasedOnLi(double threshold)
        {
            AttributedPointCollection irregularPoints = SelectPointsBasedOnLi(threshold);

            return(new IrregularDtm(irregularPoints));
        }
コード例 #6
0
        public IrregularDtm ToIrregularDtmBaesdOnCAG(int numberOfPoints)
        {
            AttributedPointCollection irregularPoints = SelectPointsBaesdOnCAG(numberOfPoints);

            return(new IrregularDtm(irregularPoints));
        }