public static List <Pico> buscarPicos(double[] fila, int largoSegmento, int tamMatriz, double resolucion, double factor) { List <Pico> posicionPicos = new List <Pico>(); int inicio = 0; while (inicio < fila.Count() - 3 * largoSegmento / 2) { int aux = aproximarPico(fila, inicio, largoSegmento); if (aux == 0) { break; } else { Pico nuevoPico = buscarCentroPico(fila, aux, largoSegmento, tamMatriz, resolucion, factor); posicionPicos.Add(nuevoPico); inicio = aux + Convert.ToInt32(largoSegmento / 2); } } return(posicionPicos); }
public static Pico buscarCentroPico(double[] fila, int posicion, int largoSegmento, int tamMatriz, double resolucion, double factor) { int largox3 = Convert.ToInt32(largoSegmento * 1.8); double[] auxArrayCentrado = new double[largox3]; double[] auxArrayCentradoInvertido = new double[largox3]; Array.Copy(fila, posicion - Convert.ToInt32(largox3 / 2), auxArrayCentrado, 0, largox3); Array.Copy(auxArrayCentrado, auxArrayCentradoInvertido, largox3); Array.Reverse(auxArrayCentradoInvertido); double auxPico = (auxArrayCentrado.Max() - auxArrayCentrado.Min()) * 0.8; //double auxPico = 0.8 * fila[posicion] + 0.2 * fila.Average(); double inicio = Calcular.interpolarLineaIndice(auxPico, auxArrayCentrado); //double inicio = Calcular.interpolarLineaIndice(fila[posicion] * factor, auxArrayCentrado); // int inicioI = Array.FindIndex(auxArrayCentrado, x => x > fila[posicion]*0.8); double fin = auxArrayCentrado.Count() - 1 - Calcular.interpolarLineaIndice(auxPico, auxArrayCentradoInvertido); //double fin = auxArrayCentrado.Count() - 1 - Calcular.interpolarLineaIndice(fila[posicion] * factor, auxArrayCentradoInvertido); // int finI = Array.FindLastIndex(auxArrayCentrado, x => x > fila[posicion] * 0.8); double aux = (inicio + fin) / 2; /* Pico nuevoPico = new Pico * { * posicionPix = posicion - Convert.ToInt32(largoSegmento / 2) + aux, * posicionmm = Math.Round((posicion - Convert.ToInt32(largoSegmento / 2) + aux - tamMatriz/2) * resolucion,3), * anchoPico = Math.Abs(finI - inicioI), //fuerzo signo por las dudas (innecesario) * alturaPico = Math.Round(auxArrayCentrado[aux],5), * }; */ Pico nuevoPico = new Pico { posicionPix = posicion - largox3 / 2 + aux, posicionmm = Math.Round((posicion - largox3 / 2 + aux - tamMatriz / 2) * resolucion, 3), anchoPico = fin - inicio, alturaPico = Math.Round(auxArrayCentrado.Max(), 5), //alturaPico = Math.Round((auxArrayCentrado[Convert.ToInt32(Math.Floor(aux))] + auxArrayCentrado[Convert.ToInt32(Math.Ceiling(aux))]) / 2, 5), }; return(nuevoPico); }