示例#1
0
        private void btnGraficar_Click(object sender, RoutedEventArgs e)
        {
            double tiempoInicial = double.Parse(txtTiempoInicial.Text);
            double tiempoFinal   = double.Parse(txtTiempoFinal.Text);
            double frecMuestreo  = double.Parse(txtFrecMuestreo.Text);

            Senal senal;

            switch (cbTipoSenal.SelectedIndex)
            {
            case 0:
                double amplitud   = double.Parse(((ConfiguracionSenoidal)(panelConfiguracion.Children[0])).txtAmplitud.Text);
                double fase       = double.Parse(((ConfiguracionSenoidal)(panelConfiguracion.Children[0])).txtFase.Text);
                double frecuencia = double.Parse(((ConfiguracionSenoidal)(panelConfiguracion.Children[0])).txtFrecuencia.Text);

                senal = new SenalSenoidal(amplitud, fase, frecuencia);
                break;

            case 1: senal = new SenalRampa();
                break;

            case 2:
                double alfa = double.Parse(((ConfiguracionExponencial)(panelConfiguracion.Children[0])).txtAlfa.Text);

                senal = new SenalExponencial(alfa);
                break;

            default: senal = null;
                break;
            }

            senal.TiempoInicial = tiempoInicial;
            senal.TiempoFinal   = tiempoFinal;
            senal.FrecMuestreo  = frecMuestreo;

            //Construye señal
            senal.construirSenalDigital();

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

            senal.escalar(factorEscala);
            //Desplazar
            double factorDesplazar = double.Parse(txtFactorDesplazamiento.Text);

            senal.desplazar(factorDesplazar);
            senal.actualizarAmplitudMaxima();
            //Truncar
            double factorTruncar = double.Parse(txtUmbral.Text);

            senal.truncar(factorTruncar);
            //Potencia
            double factorPotencia = double.Parse(txtPotencia.Text);

            senal.potencia(factorPotencia);

            //Limpia la gráfica
            plnGrafica.Points.Clear();

            if (senal != null)
            {
                //Recorrer una colección o arreglo.
                foreach (Muestra muestra in senal.Muestras)
                {
                    plnGrafica.Points.Add(new Point((muestra.x - tiempoInicial) * scrContenedor.Width,
                                                    (muestra.y / senal.amplitudMaxima) * ((scrContenedor.Height / 2.0) - 30) * -1 + (scrContenedor.Height / 2)));
                }

                lblAmplitudMaximaY.Text          = senal.amplitudMaxima.ToString();
                lblAmplitudMaximaY_Negativa.Text = "-" + senal.amplitudMaxima.ToString();
            }

            //Graficando el eje de X
            plnEjeX.Points.Clear();
            //Punto de inicio.
            plnEjeX.Points.Add(new Point(0, (scrContenedor.Height / 2)));
            //Punto de fin.
            plnEjeX.Points.Add(new Point((tiempoFinal - tiempoInicial) * scrContenedor.Width, (scrContenedor.Height / 2)));

            //Graficando el eje de Y
            plnEjeY.Points.Clear();
            //Punto de inicio.
            plnEjeY.Points.Add(new Point(0 - tiempoInicial * scrContenedor.Width, scrContenedor.Height));
            //Punto de fin.
            plnEjeY.Points.Add(new Point(0 - tiempoInicial * scrContenedor.Width, scrContenedor.Height * -1));
        }