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(((ConfiguiracionSeñ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 double factorEscala = double.Parse(txtFactorEscalaAmplitud.Text); señal.escalar(factorEscala); // Desplazar if ((bool)ckb_Desplazamiento.IsChecked) { double factorDesplazamiento = double.Parse(txt_DesplazamientoEnY.Text); señal.desplazar(factorDesplazamiento); } //Truncar if ((bool)ckb_Truncar.IsChecked) { double n = double.Parse(txt_Truncar.Text); señal.truncar(n); } //Potencia if ((bool)ckb_Potencia.IsChecked) { double x = double.Parse(txt_Potencia.Text); señal.Potencia(x); } // 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)); }
private void btnGraficar_Click(object sender, RoutedEventArgs e) { //para obtener el valor del text box se usa la propiedad .Text double tiempoInicial = double.Parse(txtTiempoInicial.Text); double tiempoFinal = double.Parse(txtTiempoFinal.Text); double frecuenciaMuestreo = double.Parse(txtFrecuenciaMuestreo.Text); double potencia = double.Parse(txtPotencia.Text); //instancia de la clase señal senoidal Señal señal; switch (cbTipoSeñal.SelectedIndex) { //señal senoidal case 0: //el primer hijo del panel configuracion es la configuracion senoidal y es de otro tipo (ui collection)asi que se hace un casting y asi se puede acceder a sus propiedades, ademas como txtamplitud es tipo texto se usa parse //nota: los hijos son los elementos de los contenedores 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 establecen los valores para la funcion señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.potencia = potencia; //se ejecuta la funcion señal.construirSeñalDigital(); if ((bool)cbAmplitud.IsChecked) { //Escalar double factorEscala = double.Parse(txtFactorEscalaAmplitud.Text); señal.escalar(factorEscala); } if ((bool)cbDesplazar.IsChecked) { //Desplazar double factorDesplazar = double.Parse(txtFactorDesplazamiento.Text); señal.desplazar(factorDesplazar); } if ((bool)cbTruncar.IsChecked) { //Truncar double factorTruncar = double.Parse(txtFactorTruncar.Text); señal.truncar(factorTruncar); señal.actualizarAmplitudMaxima(); } if ((bool)txtPotencia.IsEnabled) { //Potencia double factorPotencia = double.Parse(txtPotencia.Text); señal.Potencia(factorPotencia); señal.actualizarAmplitudMaxima(); } // limpiar la grafica plnGrafica.Points.Clear(); if (señal != null) { //recorrer una coleccion o arreglo //muestra toma el valor de señal.muestra en cada recorrido del ciclo foreach (Muestra muestra in señal.Muestras) { //se evalua la señal, luego se ajusta y de ahi se agrega el punto plnGrafica.Points.Add(new Point((muestra.X - tiempoInicial) * scrContenedor.Width, (muestra.Y / señal.AmplitudMaxima * ((scrContenedor.Height / 2) - 30) * -1) + (scrContenedor.Height / 2))); } //cambiar los valores de la etiqueta lblAmplitudMaximaPositivaY.Text = señal.AmplitudMaxima.ToString(); lblAmplitudMaximaNegativaY.Text = "-" + señal.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)); }