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);

            Señal señal;

            switch (cbTipoSeñal.SelectedIndex)
            {
            //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);
                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);
                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(txtEscalaAmplitud.Text);

            señal.escalar(FactorEscala);

            double FactorDesplazarY = double.Parse(txtDesplazarY.Text);

            señal.desplazarY(FactorDesplazarY);

            //
            if ((bool)chTruncar.IsChecked)
            {
                //truncar
                float FactorUmbral = float.Parse(txtUmbral.Text);
                señal.truncar(FactorUmbral);
            }
            //
            //
            if ((bool)chPotencia.IsChecked)
            {
                //potencia
                float FactorPotencia = float.Parse(txtPotencia.Text);
                señal.potencia(FactorPotencia);
            }
            //

            señal.actualizarAmplitudMaxima();

            plnGrafica.Points.Clear();


            if (señal != null)
            {
                //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.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 Fin
            plnEjeX.Points.Add(new Point(((tiempoFinal - tiempoInicial) * scrContenedor.Width), (scrContenedor.Height / 2)));

            //Punto del Principio
            plnEjeY.Points.Add(new Point(0 - tiempoInicial * scrContenedor.Width, scrContenedor.Height));
            //Punto del Fin
            plnEjeY.Points.Add(new Point(0 - tiempoInicial * scrContenedor.Width, scrContenedor.Height * -1));
        }
        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 graficar_Click(object sender, RoutedEventArgs e)
        {
            double tiempoInicial      = double.Parse(txtTiempoInicial.Text);
            double tiempoFinal        = double.Parse(txtTiempoFinal.Text);
            double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text);

            Señal señal;
            Señal segundaSeñal;

            //primera señal
            switch (cbTipoSeñal.SelectedIndex)
            {
            //Seniodal
            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);
                break;

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

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

            default: señal = null;
                break;
            }

            //segunda señal
            switch (cbTipoSeñalSegundaSeñal.SelectedIndex)
            {
            //Seniodal
            case 0:
                double amplitud   = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracionSegundaSeñal.Children[0]).txtAmplitud.Text);
                double fase       = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracionSegundaSeñal.Children[0]).txtFase.Text);
                double frecuencia = double.Parse(((ConfiguracionSeñalSenoidal)panelConfiguracionSegundaSeñal.Children[0]).txtFrecuencia.Text);
                segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia);
                break;

            //Rampa
            case 1:
                segundaSeñal = new Rampa();
                break;

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

            default:
                segundaSeñal = null;
                break;
            }


            plnGrafica.Points.Clear();
            plnSegundaseñal.Points.Clear();

            if (señal != null)
            {
                señal.tiempoFinal               = tiempoFinal;
                señal.tiempoInicial             = tiempoInicial;
                señal.frecuenciaMuestreo        = frecuenciaMuestreo;
                segundaSeñal.tiempoFinal        = tiempoFinal;
                segundaSeñal.tiempoInicial      = tiempoInicial;
                segundaSeñal.frecuenciaMuestreo = frecuenciaMuestreo;

                //contruir señal
                señal.construirSeñalDigital();
                segundaSeñal.construirSeñalDigital();
                //ecalar
                if ((bool)chbEscala.IsChecked)
                {
                    double factorEscala = double.Parse(txtEscalaAmplitud.Text);
                    señal.escalar(factorEscala);
                }
                if ((bool)chbEscalaSegundaSeñal.IsChecked)
                {
                    double factorEscala = double.Parse(txtEscalaAmplitudSegundaSeñal.Text);
                    segundaSeñal.escalar(factorEscala);
                }
                //desplazamiento
                if ((bool)chbDesplazamiento.IsChecked)
                {
                    double desplazamiento = double.Parse(txtDesplazamientoY.Text);
                    señal.desplazarY(desplazamiento);
                }
                if ((bool)chbDesplazamientoSegundaSeñal.IsChecked)
                {
                    double desplazamiento = double.Parse(txtDesplazamientoYSegundaSeñal.Text);
                    segundaSeñal.desplazarY(desplazamiento);
                }
                //Truncar
                if ((bool)chbTruncar.IsChecked)
                {
                    double umbral = double.Parse(txtTruncar.Text);
                    señal.truncar(umbral);
                }
                if ((bool)chbTruncarSegundaSeñal.IsChecked)
                {
                    double umbral = double.Parse(txtTruncarSegundaSeñal.Text);
                    segundaSeñal.truncar(umbral);
                }
                //potencia
                if ((bool)chbPotencia.IsChecked)
                {
                    double exponente = double.Parse(txtPotencia.Text);
                    señal.potencia(exponente);
                }
                if ((bool)chbPotenciaSegundaSeñal.IsChecked)
                {
                    double exponente = double.Parse(txtPotenciaSegundaSeñal.Text);
                    segundaSeñal.potencia(exponente);
                }

                //actualizar amplitud maxima
                señal.actualizarAmplitudMaxima();
                segundaSeñal.actualizarAmplitudMaxima();

                //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.0) - 30) * -1) + (scrContenedor.Height / 2)));
                }

                foreach (Muestra muestra in segundaSeñal.muestras)
                {
                    plnSegundaseñal.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 fin
            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, (1 * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
            //punto del fin
            plnEjeY.Points.Add(new Point((0 - tiempoInicial) * scrContenedor.Width, (-1 * ((scrContenedor.Height / 2.0) - 30) * -1) + (scrContenedor.Height / 2)));
        }