using System; using System.Collections.Generic; namespace Txgy.EWS.Client.FocalMechanism.Model { public class FmGrid { public List StationList { get; set; } public int StationCount { get; set; } public double xmin { get; set; } public double xmax { get; set; } public double ymin { get; set; } public double ymax { get; set; } public int Xmin { get; set; } public int Xmax { get; set; } public int Ymin { get; set; } public int Ymax { get; set; } public int GridLength { get; set; } public int LineCount { get; set; } public double[,] distance { get; set; } //Summary //initalize the grid length and line number, make sure use zero as center // public void initZeroCenter() { double max = Math.Max(xmax, 0 - xmin); max = Math.Max(max, ymax); max = Math.Max(max, 0 - ymin); GridLength = 10; while (max / GridLength > 5) { GridLength *= 2; if (max / GridLength > 10) GridLength *= 5; } LineCount = (int)max / GridLength + 1; Xmax = Ymax = GridLength * LineCount; Xmin = Ymin = 0 ; } public void computeDistance() { this.distance = new double[180, this.StationCount]; for (int i = 0; i < this.StationCount; i++) { if (this.StationList[i] != null) { distance[0, i] = this.StationList[i].Y; distance[90, i] = 0 - this.StationList[i].X; } } for (int i = 1; i < 180; i++) { if (i == 90) continue; double angle = Math.PI * i / 180; double tan = Math.Tan(angle); double cos = Math.Cos(angle); for (int j = 0; j < this.StationCount; j++) { if (this.StationList[j] == null) continue; double ydis = this.StationList[j].Y - this.StationList[j].X * tan; this.distance[i, j] = ydis * cos; } } } } }