/// <summary> /// Initializes a new instance of the <see cref="ColorMapBrushContainer" /> class. /// </summary> /// <param name="colorMap">The color map.</param> /// <param name="range">The range.</param> /// <param name="colorMapLength">Length of the HSV color map.</param> /// <exception cref="System.ArgumentException">HSV color map requires length > 1; colorMapLength</exception> public ColorMapBrushContainer(ColorMap colorMap, RealRange range, int colorMapLength = -1) { this.colorMap = colorMap; this.range = range; this.SetColorMapBrushes(colorMapLength); this.yIncrement = range.Delta / (this.brushes.Length - 1); }
/// <summary> /// Parses the 2d array. /// </summary> /// <param name="dataArray">The data array.</param> /// <param name="getRangeFromData">if set to <c>true</c> [get range from data].</param> /// <param name="realRange">The real range.</param> /// <param name="viewModel">The view model.</param> private static void Parse2DArray(Array dataArray, bool getRangeFromData, RealRange realRange, ref MatrixCanvasViewModel viewModel) { viewModel.RowSums = new double[dataArray.Length]; for (int i = 0; i < dataArray.GetLength(0); i++) { for (int j = 0; j < dataArray.GetLength(1); j++) { object val = dataArray.GetValue(i, j); double dval = Convert.ToDouble(val); viewModel.DataType = Type.GetTypeCode(val.GetType()); viewModel.RowSums[i] += dval; if (!getRangeFromData) { continue; } realRange.Expand(dval); } } realRange.FixErrors(); viewModel.DataRange = realRange; viewModel.Rows = dataArray.GetLength(0); viewModel.Cols = dataArray.GetLength(1); }
/// <summary> /// Parses the jagged array. /// </summary> /// <param name="dataArray">The data array.</param> /// <param name="getRangeFromData">if set to <c>true</c> [get range from data].</param> /// <param name="realRange">The real range.</param> /// <param name="viewModel">The view model.</param> private static void ParseJaggedArray(Array dataArray, bool getRangeFromData, RealRange realRange, ref MatrixCanvasViewModel viewModel) { // This is a jagged array // First get the length of the longest row List <int> rowLengths = new List <int>(); viewModel.RowSums = new double[dataArray.Length]; for (int i = 0; i < dataArray.Length; i++) { Array row = dataArray.GetValue(i) as Array; if ((row == null) || (row.Rank == 0) || (row.Length == 0)) { rowLengths.Add(0); continue; } if (row.Rank > 1) { // Deeper than two dimensions - return without creating data object viewModel.DataType = TypeCode.Empty; break; } rowLengths.Add(row.Length); for (int j = 0; j < row.Length; j++) { var val = row.GetValue(j); if (viewModel.DataType == TypeCode.Empty && val != null) { viewModel.DataType = Type.GetTypeCode(val.GetType()); } double dval = Convert.ToDouble(val); viewModel.RowSums[i] += dval; if (!getRangeFromData) { continue; } realRange.Expand(dval); } } realRange.FixErrors(); viewModel.RowLengths = rowLengths.ToArray(); viewModel.DataRange = realRange; viewModel.Rows = dataArray.Length; viewModel.Cols = rowLengths.Max(); }
/// <summary> /// Parses the array. /// </summary> /// <param name="dataArray">The data array.</param> /// <param name="getRangeFromData">if set to <c>true</c> [get range from data].</param> /// <param name="realRange">The real range.</param> /// <returns>The <see cref="MatrixCanvasViewModel"/></returns> /// <exception cref="System.ArgumentException">If getRangeFromData is false yMin and yMax must be specified</exception> private static MatrixCanvasViewModel ParseArray(Array dataArray, bool getRangeFromData, RealRange realRange) { MatrixCanvasViewModel viewModel = new MatrixCanvasViewModel { DataType = TypeCode.Empty, Rows = 0, Cols = 0, DataRange = new RealRange(), Data = dataArray }; if (getRangeFromData) { realRange = new RealRange(); } else { if (realRange == null || !realRange.IsValid()) { throw new ArgumentException("If getRangeFromData is false yMin and yMax must be specified"); } } if (dataArray == null) { return(viewModel); } switch (dataArray.Rank) { case 1: ParseJaggedArray(dataArray, getRangeFromData, realRange, ref viewModel); break; case 2: Parse2DArray(dataArray, getRangeFromData, realRange, ref viewModel); break; } return(viewModel); }
/// <summary> /// Integrates the specified function using the Trapezoid rule. /// </summary> /// <param name="f">The f.</param> /// <param name="range">The range.</param> /// <returns>The area under the curve.</returns> public static double Integrate(this Func <double, double> f, RealRange range) { return(f.Integrate(range.Values.ToArray())); }
/// <summary> /// Parses the array. /// </summary> /// <param name="obj">The object.</param> /// <param name="getRangeFromData">if set to <c>true</c> [get range from data].</param> /// <param name="realRange">The real range.</param> /// <returns>The <see cref="MatrixCanvasViewModel"/></returns> internal static MatrixCanvasViewModel ParseArray(object obj, bool getRangeFromData, RealRange realRange) { if (obj == null) { return(null); } var enumerable = obj as IEnumerable <Array>; if (enumerable != null) { return(ParseArray(enumerable.ToArray(), getRangeFromData, realRange)); } Array dataArray = obj as Array; if (dataArray != null) { return(ParseArray(dataArray, getRangeFromData, realRange)); } Matrix matrix = obj as Matrix; if (matrix != null) { return(new MatrixCanvasViewModel { Rows = matrix.Rows, Cols = matrix.Cols, DataRange = new RealRange { Max = matrix.Max(), Min = matrix.Min() }, Data = matrix.SourceArray, DataType = TypeCode.Double, RowSums = (matrix * Vector.Constant(matrix.Cols, 1)).ToArray() }); } var vectors = obj as IList <Vector>; if (vectors != null) { return(ParseVectorList(vectors)); } var sparseVectors = obj as IList <SparseVector>; if (sparseVectors != null) { return(ParseVectorList(sparseVectors)); } return(null); }