Example #1
0
        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);
        }
Example #2
0
 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();
 }
Example #3
0
        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");
        }
Example #4
0
        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);
        }
Example #5
0
        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)");
        }
Example #6
0
        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);
        }