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; Señal segundaSeñal = null; Señal señalResultante; switch (cbTipoSeñal.SelectedIndex) { case 0: // Parabolica señal = new SeñalParabolica(); break; case 1: //Senoidal 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; case 2: string rutaArchivo = ((ConfiguracionAudio) (panelConfiguracion.Children[0])).txtRutaArchivo.Text; señal = new SeñalAudio(rutaArchivo); txtTiempoInicial.Text = señal.TiempoInicial.ToString(); txtTiempoFinal.Text = señal.TiempoFinal.ToString(); txtFrecuenciaMuestreo.Text = señal.FrecuenciaMuestreo.ToString(); break; default: señal = null; break; } if (cbTipoSeñal.SelectedIndex != 2 && señal != null) { señal.TiempoInicial = tiempoInicial; señal.TiempoFinal = tiempoFinal; señal.FrecuenciaMuestreo = frecuenciaMuestreo; señal.construirSeñal(); } //Construir segunda señal si es necesario if (cbOperacion.SelectedIndex == 2 | cbOperacion.SelectedIndex == 4) { switch (cbTipoSeñal_2.SelectedIndex) { case 0: // Parabolica segundaSeñal = new SeñalParabolica(); break; case 1: //Senoidal double amplitud = double.Parse( ((ConfiguracionSeñalSenoidal) (panelConfiguracion_2.Children[0])).txtAmplitud.Text); double fase = double.Parse( ((ConfiguracionSeñalSenoidal) (panelConfiguracion_2.Children[0])).txtFase.Text ); double frecuencia = double.Parse( ((ConfiguracionSeñalSenoidal) (panelConfiguracion_2.Children[0])).txtFrecuencia.Text ); segundaSeñal = new SeñalSenoidal(amplitud, fase, frecuencia); break; case 2: string rutaArchivo = ((ConfiguracionAudio) (panelConfiguracion_2.Children[0])).txtRutaArchivo.Text; segundaSeñal = new SeñalAudio(rutaArchivo); txtTiempoInicial.Text = segundaSeñal.TiempoInicial.ToString(); txtTiempoFinal.Text = segundaSeñal.TiempoFinal.ToString(); txtFrecuenciaMuestreo.Text = segundaSeñal.FrecuenciaMuestreo.ToString(); break; default: segundaSeñal = null; break; } if (cbTipoSeñal_2.SelectedIndex != 2 && segundaSeñal != null) { segundaSeñal.TiempoInicial = tiempoInicial; segundaSeñal.TiempoFinal = tiempoFinal; segundaSeñal.FrecuenciaMuestreo = frecuenciaMuestreo; segundaSeñal.construirSeñal(); } } switch (cbOperacion.SelectedIndex) { case 0: //Escala de amplitud double factorEscala = double.Parse( ((OperacionEscalaAmplitud) (panelConfiguracionOperacion. Children[0])).txtFactorEscala .Text); señalResultante = Señal.escalarAmplitud(señal, factorEscala); break; case 1: double factorDesplazamiento = double.Parse(((DesplazamientoAmplitud)(panelConfiguracionOperacion.Children[0])) .txtFactorDesplazamiento.Text); señalResultante = Señal.desAmplitud(señal, factorDesplazamiento); break; case 2: señalResultante = Señal.multiplicarSeñales(señal, segundaSeñal); break; case 3: double factorExponencial = double.Parse(((OperacionEscalaExponencial)(panelConfiguracionOperacion.Children[0])) .txtFactorExponente.Text); señalResultante = Señal.escalaExponencial(señal, factorExponencial); break; case 4: señalResultante = Señal.adicionarSeñales(señal, segundaSeñal); break; case 5: //Transf. de Fourier señalResultante = Señal.transformadaFourier(señal); break; default: señalResultante = null; break; } /////AQUI ME QUEDE //Operador ternario //Evalua condicion. Si si y Si no //Elige entre la primera y la resultante double amplitudMaxima = (señal.AmplitudMaxima >= señalResultante.AmplitudMaxima) ? señal.AmplitudMaxima : señalResultante.AmplitudMaxima; //Elige entre la mas grande de la 1ra y resultante y la segunda if (segundaSeñal != null) { amplitudMaxima = (amplitudMaxima > segundaSeñal.AmplitudMaxima) ? amplitudMaxima : segundaSeñal.AmplitudMaxima; } plnGrafica.Points.Clear(); plnGraficaResultante.Points.Clear(); plnGrafica_2.Points.Clear(); if (segundaSeñal != null) { foreach (var muestra in segundaSeñal.Muestras) { plnGrafica_2.Points.Add(adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima)); } } foreach (Muestra muestra in señal.Muestras) { plnGrafica.Points.Add( adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima) ); } foreach (Muestra muestra in señalResultante.Muestras) { plnGraficaResultante.Points.Add( adaptarCoordenadas(muestra.X, muestra.Y, tiempoInicial, amplitudMaxima) ); } if (cbOperacion.SelectedIndex == 5) { int indeceMaximo = 0; for (int i = 0; i < (señalResultante.Muestras.Count / 2); i++) { if (señalResultante.Muestras[i].Y > señalResultante.Muestras[indeceMaximo].Y) { indeceMaximo = i; } } lblHertz.Text = ((indeceMaximo * frecuenciaMuestreo) / (señal.Muestras.Count)).ToString("N") + "Hz"; } lblLimiteSuperior.Text = amplitudMaxima.ToString("F"); lblLimiteInferior.Text = "-" + amplitudMaxima.ToString("F"); lblLimiteSuperiorResultante.Text = amplitudMaxima.ToString("F"); lblLimiteInferiorResultante.Text = "-" + amplitudMaxima.ToString("F"); //Original plnEjeX.Points.Clear(); plnEjeX.Points.Add( adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima) ); plnEjeX.Points.Add( adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima) ); //Resultado plnEjeXResultante.Points.Clear(); plnEjeXResultante.Points.Add(( adaptarCoordenadas(tiempoInicial, 0.0, tiempoInicial, amplitudMaxima))); plnEjeXResultante.Points.Add( adaptarCoordenadas(tiempoFinal, 0.0, tiempoInicial, amplitudMaxima)); //ver el cambio de como afecto la escala de la grafica //Original plnEjeY.Points.Clear(); plnEjeY.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima)); plnEjeY.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima * -1, tiempoInicial, amplitudMaxima)); //Resultado plnEjeYResultante.Points.Clear(); plnEjeYResultante.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima, tiempoInicial, amplitudMaxima) ); plnEjeYResultante.Points.Add( adaptarCoordenadas(0.0, amplitudMaxima * -1, tiempoInicial, amplitudMaxima) ); }