/// <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); }
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]; }
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; } }
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); }
public IrregularDtm ToIrregularDtmBasedOnLi(double threshold) { AttributedPointCollection irregularPoints = SelectPointsBasedOnLi(threshold); return(new IrregularDtm(irregularPoints)); }
public IrregularDtm ToIrregularDtmBaesdOnCAG(int numberOfPoints) { AttributedPointCollection irregularPoints = SelectPointsBaesdOnCAG(numberOfPoints); return(new IrregularDtm(irregularPoints)); }