예제 #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(txtFrecuenciaMuestreo.Text);

            Señal señal;

            Señal segundaSeñal;

            switch (cbTipoSeñal.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);

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

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

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

                señal = new SenalExponencial(alpha);
                break;

            default:
                señal = null;
                break;
            }

            switch (cbTipoSeñal_SegundaSeñal.SelectedIndex)
            {
            case 0:
                double amplitud   = double.Parse(((ConfiguracionSenoidal)(panelConfiguracion_SegundaSeñal.Children[0])).txtAmplitud.Text);
                double fase       = double.Parse(((ConfiguracionSenoidal)(panelConfiguracion_SegundaSeñal.Children[0])).txtFase.Text);
                double frecuencia = double.Parse(((ConfiguracionSenoidal)(panelConfiguracion_SegundaSeñal.Children[0])).txtFrecuencia.Text);

                segundaSeñal = new SenalSenoidal(amplitud, fase, frecuencia);
                break;

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

            case 2:
                double alpha = double.Parse(((ConfiguracionExponencial)(panelConfiguracion_SegundaSeñal.Children[0])).txtAlpha.Text);

                segundaSeñal = new SenalExponencial(alpha);
                break;

            default:
                segundaSeñal = null;
                break;
            }

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

            //Segunda Señal
            segundaSeñal.TiempoInicial      = tiempoInicial;
            segundaSeñal.TiempoFinal        = tiempoFinal;
            segundaSeñal.FrecuenciaMuestreo = frecMuestreo;

            señal.construirSenalDigital();

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

            señal.escalar(factorEscala);

            señal.actualizarAmplitudMaxima();

            plnGrafica.Points.Clear();
            if ((bool)cbEscalar.IsChecked)
            {
                señal.escalar(float.Parse(txtFactorEcalar.Text)) else
                if ((bool)cbDesplazar)
                {
                    if (señal != null)
                    {
                        //Recorrer una colección o arreglo.
                        foreach (Muestra muestra in señal.Muestra)
                        {
                            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("F");
                        lblAmplitudMaximaY_Negativa.Text = "-" + señal.AmplitudMaxima.ToString("F");
                    }
                }
            }
예제 #2
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));
        }