コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }