/// <summary> /// Obtains the value. /// </summary> /// <param name="array3D">The array3 d.</param> /// <param name="heightIndex">Index of the height.</param> /// <param name="subscriptI">The subscript i.</param> /// <param name="subscriptJ">The subscript j.</param> /// <returns></returns> public static double ObtainAcumulatedValue(Hyp3DArray <double> array3D, double heightIndex, int subscriptI, int subscriptJ) { if (heightIndex > array3D.OSize) { heightIndex = array3D.OSize; } if (heightIndex < 0) { heightIndex = 0; } int superiorIndex = (int)Math.Ceiling(heightIndex) - 1; int inferiorIndex = (int)Math.Floor(heightIndex) - 1; double fractionPart = heightIndex % 1; double superiorValue = 0; double inferiorValue = 0; if (superiorIndex >= 0) { superiorValue = array3D.GetValue(subscriptI, subscriptJ, superiorIndex); } if (inferiorIndex >= 0) { inferiorValue = array3D.GetValue(subscriptI, subscriptJ, inferiorIndex); } return(inferiorValue + (superiorValue - inferiorValue) * fractionPart); }
/// <summary> /// Acumulates the z values. /// </summary> /// <param name="array3D">The array3d.</param> /// <returns></returns> public static Hyp3DArray <double> AcumulateZValues(Hyp3DArray <double> array3D) { int m = array3D.MSize; int n = array3D.NSize; int o = array3D.OSize; var acumulatedArray = new Hyp3DArray <double>(m, n, o); // First row for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { double value = array3D.GetValue(i, j, 0); acumulatedArray.SetValue(value, i, j, 0); } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { for (int k = 1; k < o; k++) { double oldValue = acumulatedArray.GetValue(i, j, k - 1); double value = array3D.GetValue(i, j, k); acumulatedArray.SetValue(value + oldValue, i, j, k); } } } return(acumulatedArray); }
/// <summary> /// Maximums the value z direction. /// </summary> /// <param name="array3D">The array3 d.</param> /// <param name="subscriptI">The subscript i.</param> /// <param name="subscriptJ">The subscript j.</param> /// <returns></returns> public static double MaximumValueZDirection(Hyp3DArray <double> array3D, int subscriptI, int subscriptJ) { int o = array3D.OSize; int maxValueIndex = 0; double maxValue = array3D.GetValue(subscriptI, subscriptJ, 0); for (int k = 0; k < o; k++) { double value = array3D.GetValue(subscriptI, subscriptJ, k); if (value > maxValue) { maxValue = value; maxValueIndex = k; } } return(maxValueIndex); }