public static FuncionSinusoidal operator +(FuncionSinusoidal izq, FuncionSinusoidal der) { var fase_izq = izq.fase; var fase_der = der.fase; var angulo = Angulo.Coseno; if (Math.Abs(izq.frecuencia - der.frecuencia) >= Epsilon) throw new Exception("No se pueden sumar funciones sinusoidales cuya frecuencia sea diferente"); if (izq.angulo == Angulo.Seno && der.angulo == Angulo.Seno) angulo = Angulo.Seno; if (izq.angulo == Angulo.Seno) fase_izq = fase_izq - Math.PI / 2; if (der.angulo == Angulo.Seno) fase_der = fase_der - Math.PI / 2; var fasor_izq = new Complejo(izq.amplitud, fase_izq, Complejo.Forma.Polar); var fasor_der = new Complejo(der.amplitud, fase_der, Complejo.Forma.Polar); var fasor_suma = fasor_izq + fasor_der; var fase_total = fasor_suma.b; if (angulo == Angulo.Seno) fase_total = fase_total + Math.PI / 2; return new FuncionSinusoidal(fasor_suma.a, angulo, izq.frecuencia, fase_total); }
public void Clear() { NBarra.Clear(); OperacaoBarra.Clear(); EstadoBarra.Clear(); Tipo.Clear(); GrupoDeBaseDeTensao.Clear(); Nome.Clear(); GrupoDeLimiteDeTensao.Clear(); Tensao.Clear(); Angulo.Clear(); GeracaoAtiva.Clear(); GeracaoReativa.Clear(); CargaAtiva.Clear(); CargaReativa.Clear(); GeracaoReativaMinima.Clear(); GeracaoReativaMaxima.Clear(); BarraControladaBarra.Clear(); CapacitorReator.Clear(); Area.Clear(); TensaoParaDefinicaoDeCarga.Clear(); ModoDeVisualizacao.Clear(); AgregadorBarra1.Clear(); AgregadorBarra2.Clear(); AgregadorBarra3.Clear(); AgregadorBarra4.Clear(); AgregadorBarra5.Clear(); }
public FuncionSinusoidal(double amplitud = 1.0, Angulo angulo = Angulo.Coseno, double frecuencia = 1.0, double fase = 0.0) { this.amplitud = amplitud; this.frecuencia = frecuencia; this.fase = fase; this.angulo = angulo; this.precision = 2; if (amplitud < 0) throw new Exception("El valor de la amplitud no puede ser menor que cero"); }
private Angulo CalcularAng2(double x, double y) { Angulo valor = new Angulo(); x = x + X_CorrectionFactor; y = y + Y_CorrectionFactor; c = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2)); B = (Math.Acos((Math.Pow(L2, 2) - Math.Pow(L1, 2) - Math.Pow(c, 2)) / (-2 * L1 * c))) * (180 / pi); C = (Math.Acos((Math.Pow(c, 2) - Math.Pow(L2, 2) - Math.Pow(L1, 2)) / (-2 * L1 * L2))) * (180 / pi); theta = (Math.Asin(y / c)) * (180 / pi); valor.th1 = B + theta + S_1_CorrectionFactor; valor.th2 = C + S_2_CorrectionFactor; return(valor); }
public static FuncionSinusoidal Interpretar(string expresion) { const string NUMERO_DECIMAL = @"(?:([+-]?[\d]+[\.\,]?[\d]*))"; expresion = Regex.Replace(expresion, @"\s+", string.Empty); Match m; // Evita el default que agrega "AllowThousands" NumberStyles style = NumberStyles.Float; m = Regex.Match( expresion, @"^" + NUMERO_DECIMAL + @"?(sin|cos)\s*\(" + NUMERO_DECIMAL + "t" + NUMERO_DECIMAL + @"?\)\s*$", RegexOptions.Compiled); if (m.Success) { double frecuencia = double.Parse(m.Groups[3].Value, style); double amplitud = m.Groups[1].Success ? double.Parse(m.Groups[1].Value, style) : 1; double fase = m.Groups[4].Success ? double.Parse(m.Groups[4].Value, style) : 0; FuncionSinusoidal.Angulo angulo; string angulo_texto = m.Groups[2].Value; if (angulo_texto == "sin") angulo = Angulo.Seno; else if (angulo_texto == "cos") angulo = Angulo.Coseno; else throw new ErrorDeSintaxisException( "Solo se esperan funciones sin o cos"); return new FuncionSinusoidal(amplitud, angulo, frecuencia, fase); } throw new ErrorDeSintaxisException( "Se espera una funcion de la forma Asin(wt+o) o Acos(wt+o)"); }
public override string ToString() { var angulo = "cos"; if (this.angulo == Angulo.Seno) angulo = "sin"; var fase = ""; if (!this.fase.Equals(0.0)) { if (this.fase > 0) fase += "+"; fase += string.Format("{0}pi", Math.Round(this.fase / Math.PI, this.precision)); } return string.Format("{0}{1}({2}t{3})", Math.Round(this.amplitud, this.precision), angulo, Math.Round(this.frecuencia, this.precision), fase); }