private void ShowCalculatedValues() { DadosEntrada dados = DataEntry(); if (dados != null) { Calculos calc = new Calculos(); DataSet dsDln = new DataSet(); DataTable tabCalculos = new DataTable(); tabCalculos.Columns.Add("Hora", typeof(double)); tabCalculos.Columns.Add("IluminanciaCC_H", typeof(double)); tabCalculos.Columns.Add("IluminanciaPE_H", typeof(double)); tabCalculos.Columns.Add("IluminanciaCE_H", typeof(double)); tabCalculos.Columns.Add("IluminanciaCC_V", typeof(double)); tabCalculos.Columns.Add("IluminanciaPE_V", typeof(double)); tabCalculos.Columns.Add("IluminanciaCE_V", typeof(double)); tabCalculos.Columns.Add("LuminanciaCC", typeof(double)); tabCalculos.Columns.Add("LuminanciaPE", typeof(double)); tabCalculos.Columns.Add("LuminanciaCE", typeof(double)); for (int hora = 6; hora < 19; hora++) { calc.Calcula(dados, hora); DataRow linha = tabCalculos.NewRow(); linha["Hora"] = hora; linha["IluminanciaCC_H"] = calc.Resultados.IluminanciaCC_H; linha["IluminanciaPE_H"] = calc.Resultados.IluminanciaPE_H; linha["IluminanciaCE_H"] = calc.Resultados.IluminanciaCE_H; linha["IluminanciaCC_V"] = calc.Resultados.IluminanciaCC_V; linha["IluminanciaPE_V"] = calc.Resultados.IluminanciaPE_V; linha["IluminanciaCE_V"] = calc.Resultados.IluminanciaCE_V; linha["LuminanciaCC"] = calc.Resultados.LuminanciaCC; linha["LuminanciaPE"] = calc.Resultados.LuminanciaPE; linha["LuminanciaCE"] = calc.Resultados.LuminanciaCE; tabCalculos.Rows.Add(linha); } dataGridViewDln.DataSource = tabCalculos; } }
// 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(); }
// Executa os calculos basicos public void Calcula(DadosEntrada dados, double hora) { SetaValores(dados, hora); // (07) Equacao do tempo ET = 0.170 * Math.Sin(4.0 * Math.PI / 373.0 * (J - 80.0)) - 0.129 * Math.Sin(2.0 * Math.PI / 355.0 * (J - 8.0)); // (08) Tempo Solar T = HP + ET + ((12.0 * (MP - LONG)) / Math.PI); // (09) declinacao solar D = 0.4093 * Math.Sin((2.0 * Math.PI / 368.0) * (J - 81.0)); // (10) altitude solar AT = Math.Asin(Math.Sin(LAT) * Math.Sin(D) - Math.Cos(LAT) * Math.Cos(D) * Math.Cos(Math.PI * T / 12.0)); // Correcao feita 12/5/93 Rogerio // AT nao pode estar fora do intervalo acima, pois indica // sol abaixo da linha do horizonte //if ((AT > Math.PI) || (AT < 0.0)) // AT = 0.0; // (11) Azimute solar ??????????????????????????? AS = Math.Atan2(-(Math.Cos(D) * Math.Sin(Math.PI * T / 12.0)), -((Math.Cos(LAT) * Math.Sin(D) + Math.Sin(LAT) * Math.Cos(D) * Math.Cos(Math.PI * T / 12.0)))); // (12) Azimute de elevacao solar AZ = AS - AE; // (13) Angulo de incidencia AI = Math.Acos(Math.Cos(AT) * Math.Cos(AZ)); // (14) Angulo de perfil // Correcao feita 27/7/91 Paulo e Rogerio if ((AI > Math.PI / 2.0)) { AI = Math.PI / 2.0; AP = 0.0; } else { AP = Math.Atan(Math.Sin(AS) / Math.Cos(AI)); } // (15) Iluminancia solar extraterrestre ISE = CIS * (1.0 + 0.034 * Math.Cos(2 * Math.PI * (J - 2) / 365.0)); // (16) Massa de ar otico // Coreccao feita em 12/5/93 por Rogerio if (AT == 0.0) { M = 1.0; } else { M = 1.0 / Math.Sin(AT); } // (17) Angulo entre o sol e o zenite Z = Math.PI / 2.0 - AT; // (18) Angulo entre o sol e ponto P no ceu PS = Math.Acos(Math.Cos(Z) * Math.Cos(PZ)); // (19) Iluminancia solar direta normal (ISDN) ISDNCC = ISE * Math.Exp(-0.21 * M); ISDNPE = ISE * Math.Exp(-0.80 * M); // (20) Iluminancia solar direta horizontal (ISDH) ISDHCC = ISDNCC * Math.Sin(AT); ISDHPE = ISDNPE * Math.Sin(AT); // (21) Iluminancia solar direta vertical (ISDV) ISDVCC = ISDNCC * Math.Cos(AI); ISDVPE = ISDNPE * Math.Cos(AI); Iluminancias(); Luminancias(); }
public CalculaPeriodo(DadosEntrada dados, DateTime dataInicial, DateTime dataFinal) { Dados = dados; DataInicial = dataInicial; DataFinal = dataFinal; }
private DadosEntrada DataEntry() { if (string.IsNullOrEmpty(textBoxLocal.Text)) { MessageBox.Show("Please, informe a local name"); return(null); } //Program.objParametros.UltimaDataInicial = dateTimePickerInicial.Value; //Program.objParametros.UltimaDataFinal = dateTimePickerFinal.Value; //JulianCalendar myCal = new JulianCalendar(); //for (double dia = Program.objParametros.UltimaDataInicial.ToOADate(); dia < Program.objParametros.UltimaDataFinal.ToOADate(); dia++) //{ // DateTime d = DateTime.FromOADate(dia); // Debug.WriteLine(d.ToString("dd/MM/yyyy") + " " + myCal.GetDayOfYear(d).ToString()); //} //DateTime dataIniciaoAno = new DateTime(Program.objParametros.UltimaDataInicial.Year, 1, 1); //int juliano = Convert.ToInt32(Math.Floor(Program.objParametros.UltimaDataInicial.ToOADate() - dataIniciaoAno.ToOADate())) + 1; Coordinate c = new Coordinate(); double latitude, longitude; DadosEntrada dados = new DadosEntrada(""); try { latitude = Convert.ToDouble(numericUpDownLatitude.Value); longitude = Convert.ToDouble(numericUpDownLongitude.Value); dados.CoordenadasLocal = new Coordinate(latitude, longitude); int factor = Convert.ToInt32(Math.Abs(longitude) / 15); if ((double)(factor * 15) - Math.Abs(longitude) > 7.5) { factor += 1; } dados.Meridian = Convert.ToInt32(Math.Sign(longitude) * (double)(factor * 15)); } catch { MessageBox.Show("Please, informe valid latitude and longitude"); return(null); } dados.Data = new DateTime(DateTime.Now.Year, 1, 1); dados.Nome = textBoxLocal.Text; dados.Azimuth = Convert.ToDouble(numericUpDownAzimuth.Value); dados.PointPAngle = Convert.ToDouble(numericUpDownPointPAngle.Value); dados.PointPAzimuth = Convert.ToDouble(numericUpDownPointPAzimuth.Value); dados.horas = 8; dados.StartTime = Convert.ToInt32(numericUpDownStartHour.Value); dados.EndTime = Convert.ToInt32(numericUpDownEndHour.Value); Program.objParametros.LatitudeCenterMap = dados.CoordenadasLocal.Latitude.ToDouble(); Program.objParametros.LongitudeCenterMap = dados.CoordenadasLocal.Longitude.ToDouble(); Program.objParametros.Azimuth = dados.Azimuth; Program.objParametros.PointPAngle = dados.PointPAngle; Program.objParametros.PointPAzimuth = dados.PointPAzimuth; Program.objParametros.StartTime = dados.StartTime; Program.objParametros.EndTime = dados.EndTime; lblData.Text = dados.ToString();; return(dados); }