示例#1
0
 public void Adiciona(Resultados r2)
 {
     Hora             = r2.Hora;
     IluminanciaCE_H += r2.IluminanciaCE_H;
     IluminanciaPE_H += r2.IluminanciaPE_H;
     IluminanciaCC_H += r2.IluminanciaCC_H;
     IluminanciaCE_V += r2.IluminanciaCE_V;
     IluminanciaPE_V += r2.IluminanciaPE_V;
     IluminanciaCC_V += r2.IluminanciaCC_V;
     LuminanciaCC    += r2.LuminanciaCC;
     LuminanciaPE    += r2.LuminanciaPE;
     LuminanciaCE    += r2.LuminanciaCE;
 }
示例#2
0
 // Seta valores
 public void SetaValores(DadosEntrada dados, double hora)
 {
     LAT  = dados.CoordenadasLocal.Latitude.ToRadians();
     LONG = dados.CoordenadasLocal.Longitude.ToRadians();
     //LAT = (dados.CoordenadasLocal.Latitude.Degrees +
     //          dados.CoordenadasLocal.Latitude.Minutes / 60.0 +
     //            dados.CoordenadasLocal.Latitude.Seconds / 3600.0) * PI180;
     //LONG = (dados.CoordenadasLocal.Longitude.Degrees +
     //          dados.CoordenadasLocal.Longitude.Minutes / 60.0 +
     //            dados.CoordenadasLocal.Longitude.Seconds / 3600.0) * PI180;
     AE = dados.Azimuth;
     MP = dados.Meridian;
     PZ = dados.PointPAngle;
     PA = dados.PointPAzimuth;
     J  = (double)_julianCalendar.GetDayOfYear(dados.Data);
     // Hora padrao em decimal (minutos e segundos ignorados)
     HP         = hora;
     Resultados = new Resultados();
 }
示例#3
0
        public bool Calcula(ref string mensagemErro)
        {
            try
            {
                if (DataInicial > DataFinal)
                {
                    mensagemErro = "Final date before start.";
                    return(false);
                }
                int maxDay = 365;
                if ((DateTime.IsLeapYear(DataInicial.Year) && DataInicial.Month <= 2) ||
                    (DateTime.IsLeapYear(DataFinal.Year) && DataFinal.Month >= 3))
                {
                    maxDay = 366;
                }
                if ((DataFinal.Subtract(DataInicial)).TotalDays > maxDay)
                {
                    mensagemErro = "Maximum one year for typical day calculation.";
                    return(false);
                }

                Calculos calc = new Calculos();
                _totalDiasCalculados = 0;
                _listaResultados     = new List <Resultados>();
                for (DateTime data = DataInicial; data <= DataFinal; data = data.AddDays(1))
                {
                    Dados.Data = data;
                    EnviaMensagem("Calculating " + data.ToString("dd - MMM"));
                    for (int hour = Program.objParametros.StartTime; hour <= Program.objParametros.EndTime; hour++)
                    {
                        Dados.horas = hour;
                        calc.Calcula(Dados, hour);
                        _listaResultados.Add(calc.Resultados);
                    }
                    _totalDiasCalculados++;
                }

                // Calculate each time average in the period
                List <Resultados> averageResult = new List <Resultados>();
                for (int hour = Program.objParametros.StartTime; hour <= Program.objParametros.EndTime; hour++)
                {
                    List <Resultados> hourResult    = _listaResultados.FindAll(delegate(Resultados r) { return(r.Hora == hour); });
                    Resultados        resultAverage = new Resultados();
                    foreach (Resultados result in hourResult)
                    {
                        resultAverage.Adiciona(result);
                    }
                    resultAverage.CalculaMedia(_totalDiasCalculados);
                    averageResult.Add(resultAverage);
                }

                // Calculate moda: real day close to average result
                double smallDtandardDeviation = double.MaxValue;
                for (DateTime data = DataInicial; data <= DataFinal; data = data.AddDays(1))
                {
                    Dados.Data = data;
                    EnviaMensagem("Recalculating " + data.ToString("dd - MMM"));
                    double varianceCC = 0, variancePE = 0, varianceCE = 0;
                    for (int hour = Program.objParametros.StartTime; hour <= Program.objParametros.EndTime; hour++)
                    {
                        Dados.horas = hour;
                        calc.Calcula(Dados, hour);
                        Resultados hourResult = averageResult.Find(delegate(Resultados r) { return(r.Hora == hour); });

                        double Aux = calc.Resultados.TotalLightCC - hourResult.TotalLightCC;
                        varianceCC += (Aux * Aux);

                        Aux         = calc.Resultados.TotalLightPE - hourResult.TotalLightPE;
                        variancePE += (Aux * Aux);

                        Aux         = calc.Resultados.TotalLightCE - hourResult.TotalLightCE;
                        varianceCE += (Aux * Aux);
                    }
                    double standardDeviationCC = Math.Sqrt(varianceCC);
                    double standardDeviationPE = Math.Sqrt(variancePE);
                    double standardDeviationCE = Math.Sqrt(varianceCE);

                    // Using only standard CC deviation to choose typical day
                    if (standardDeviationCC < smallDtandardDeviation)
                    {
                        smallDtandardDeviation = standardDeviationCC;
                        TypicalDay             = data;
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                TypicalDay   = DateTime.MinValue;
                mensagemErro = "Erro em CalculaPeriodo.Calcula: " + ex.Message;
                return(false);
            }
        }