private void btnGraficar_Click(object sender, RoutedEventArgs e)
        {
            double tiempoInicial      = double.Parse(txtTiempoInicial.Text);
            double tiempoFinal        = double.Parse(txtTiempoFinal.Text);
            double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text);
            double umbral             = double.Parse(txtUmbral.Text);

            Señal señal;

            switch (cbTipoSeñal.SelectedIndex)
            {
            //Señal Senoidal
            case 0:
                double amplitud = double.Parse(((ConfiguracionSeñalSenoidal)
                                                panelConfiguracion.Children[0]).txtAmplitud.Text);

                double fase = double.Parse(((ConfiguracionSeñalSenoidal)
                                            panelConfiguracion.Children[0]).txtFase.Text);

                double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)
                                                  panelConfiguracion.Children[0]).txtFrecuencia.Text);

                señal = new SeñalSenoidal(amplitud, fase, frecuencia, umbral);     //constructor

                break;

            //Rampa
            case 1: señal = new SeñalRampa();

                break;

            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)
                                             panelConfiguracion.Children[0]).txtAlpha.Text);

                señal = new SeñalExponencial(alpha, umbral);
                break;

            default:

                señal = null;

                break;
            }

            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;

            señal.construirSeñalDigital();



            //Escalar
            double factorEscala = double.Parse(txtFactorEscalaAmplitud.Text);

            señal.escalar(factorEscala);

            //Desplazamiento
            double desplazar = double.Parse(txtDesplazamientoY.Text);

            señal.desplazarY(desplazar);

            //Truncar
            señal.truncar(umbral);

            //Potencia
            double potencia = double.Parse(txtPotencia.Text);

            señal.potenciar(potencia);

            señal.actualizarAmplitudMaxima();


            plnGrafica.Points.Clear();

            if (señal != null)
            {
                //Recorre todos los elementos de una coleccion o arreglo
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y /
                                                                                                        señal.AmplitudMaxima * ((scrContenedor.Height / 2.0) - 30) * -1) +
                                                    (scrContenedor.Height / 2)));
                }

                lblAmplitudMaximaY.Text         = señal.AmplitudMaxima.ToString();
                lblAmplitudMaximaNegativaY.Text = "-" + señal.AmplitudMaxima.ToString();
            }

            plnEjeX.Points.Clear();
            //Punto del principio
            plnEjeX.Points.Add(new Point(0, (scrContenedor.Height / 2)));
            //Punto del final
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, (scrContenedor.Height / 2)));

            plnEjeY.Points.Clear();
            //Punto del principio
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (señal.AmplitudMaxima *
                                                                                     ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //Punto del final
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (-señal.AmplitudMaxima *
                                                                                     ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
        }
        private void BotonGraficar_Click(object sender, RoutedEventArgs e)
        {
            double tiempoInicial      = double.Parse(txt_TiempoInicial.Text);
            double tiempoFinal        = double.Parse(txt_TiempoFinal.Text);
            double frecuenciaMuestreo = double.Parse(txt_FrecuenciaDeMuestreo.Text);

            Señal señal;

            switch (cb_TipoSeñal.SelectedIndex)
            {
            // Señal Senoidal
            case 0:
                double amplitud   = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txt_Amplitud.Text);
                double fase       = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txt_Fase.Text);
                double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)(panelConfiguracion.Children[0])).txt_Frecuencia.Text);

                señal = new SeñalSenoidal(amplitud, fase, frecuencia);
                break;

            // Señal Rampa
            case 1:
                señal = new SeñalRampa();
                break;

            // Señal Exponencial
            case 2:
                double alpha = double.Parse(((ConfiguracionSeñalExponencial)(panelConfiguracion.Children[0])).txt_Alpha.Text);
                señal = new SeñalExponencial(alpha);
                break;

            default:
                señal = null;
                break;
            }

            señal.TiempoInicial      = tiempoInicial;
            señal.TiempoFinal        = tiempoFinal;
            señal.FrecuenciaMuestreo = frecuenciaMuestreo;

            señal.construirSeñalDigital();

            // Escalar
            if ((bool)ckb_Escala.IsChecked)
            {
                double factorEscala = double.Parse(txt_EscalaAmplitud.Text);
                señal.escalar(factorEscala);
            }

            // Desplazar
            if ((bool)ckb_Desplazamiento.IsChecked)
            {
                double factorDesplazamiento = double.Parse(txt_Desplazamiento.Text);
                señal.desplazar(factorDesplazamiento);
            }

            // Truncar
            if ((bool)ckb_Truncado.IsChecked)
            {
                double n = double.Parse(txt_Truncado.Text);
                señal.truncar(n);
            }

            // Potenciar
            if ((bool)ckb_Potencia.IsChecked)
            {
                double n = Math.Abs(double.Parse(txt_Potencia.Text));
                señal.potenciar(n);
            }

            // Actualizar
            señal.actualizarAmplitudMaxima();

            plnGrafica.Points.Clear();

            if (señal != null)
            {
                // Sirve para recorrer una coleccion o arreglo
                foreach (Muestra muestra in señal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y / señal.AmplitudMaxima * ((scrContenedor.Height / 2) - 30) * -1 + (scrContenedor.Height / 2))));
                }

                lbl_AmplitudMaxima.Text = señal.AmplitudMaxima.ToString();
                lbl_AmplitudMinima.Text = "-" + señal.AmplitudMaxima.ToString();
            }

            // Línea del Eje X
            plnEjeX.Points.Clear();
            plnEjeX.Points.Add(new Point(0, scrContenedor.Height / 2));
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, scrContenedor.Height / 2));

            // Línea del Eje Y
            plnEjeY.Points.Clear();
            plnEjeY.Points.Add(new Point((-tiempoInicial) * scrContenedor.Width, 0));
            plnEjeY.Points.Add(new Point((-tiempoInicial) * scrContenedor.Width, scrContenedor.Height));
        }