PDA

View Full Version : گفتگو: کد محاسبه اوقات شرعی



unishomal
دوشنبه 19 مهر 1389, 22:10 عصر
سلام،
بچه های برنامه نویس کم لطف شدن حالا چرا نمیدونم

بعد از کلی این در اون در زدن این کدو پیدا کردم،مشکل خیلا بود امیدوارم راه گشا باشه واسه همه...دوستان تست کنن تا ببینیم جواب میده یا نه؟من اطلاعات لازمو ندارم

و اما کد...




/// <summary>

/// برای محاسبه اوقات شرعی استفاده می شود
/// و یک لیست از دیت تایم ها را باز می گرداند که به ترتیب معرف اوقات مختلف هستند
/// <para>ایندکس 0 : اذان صبح</para>
/// <para>ایندکس 1 : طلوع آفتاب</para>
/// <para>ایندکس 2 : اذان ظهر</para>
/// <para>ایندکس 3 : غروب آفتاب</para>
/// <para>ایندکس 4 : اذان مغرب</para>
/// <para>ایندکس 5 : نیمه شب شرعی</para>
/// </summary>
/// <param name="longitude">طول جغرافیائی</param>
/// <param name="latitude">عرض جغرافیائی</param>
/// <param name="objDate">تاریخ روزی که می خواهید اوقات شرعی محاسبه شود</param>
public static List<DateTime> GetPrayerTimes(double longitude, double latitude, DateTime objDate)
{
objDate = new DateTime(objDate.Year, objDate.Month, objDate.Day);
System.Globalization.PersianCalendar objPersianCalendar = new System.Globalization.PersianCalendar();
int PersianDayOfYear = objPersianCalendar.GetDayOfYear(objDate);
double ChangeAngle = 23.45 * Math.Sin(2 * Math.PI * PersianDayOfYear / 365);
double DC = 2 * Math.PI / 365;
double ConstDay = DC * (objDate.DayOfYear + 10) + 0.033 * Math.Sin(DC * (objDate.DayOfYear - 2));
double eqt = -1 * (9.8 * Math.Sin(2 * ConstDay) + 7.6 * Math.Sin(ConstDay - 0.2));

int HourIsAdd = (objPersianCalendar.GetMonth(objDate) < 7 && objPersianCalendar.GetMonth(objDate) > 12) ? 1 : 0;
double ZOHR = 13 + (3.5 - (longitude / 15)) - (eqt / 60);
DateTime objTempDateTime = objDate;

List<DateTime> objResultList = new List<DateTime>();

//اذان صبح
objResultList.Add(objTempDateTime.AddHours(ZOHR - T_ForParyerTime(17.8, latitude, ChangeAngle)));
objTempDateTime = objDate;

//طلوع آفتاب
objResultList.Add(objTempDateTime.AddHours(ZOHR - T_ForParyerTime(0.8333, latitude, ChangeAngle)));
objTempDateTime = objDate;

//اذان ظهر
objResultList.Add(objTempDateTime.AddHours(ZOHR));
objTempDateTime = objDate;

//غروب آفتاب
objResultList.Add(objTempDateTime.AddHours(ZOHR + T_ForParyerTime(0.8333, latitude, ChangeAngle)));
objTempDateTime = objDate;

//اذان مغرب
objResultList.Add(objTempDateTime.AddHours(ZOHR + T_ForParyerTime(4, latitude, ChangeAngle)));
objTempDateTime = objDate;

//نمیمه شب شرعی

return objResultList;
}

private static double T_ForParyerTime(double dblParametr, double latitude, double ChangeAngle)
{
double r_dblParametr = dblParametr * Math.PI / 180;
double r_latitude = latitude * Math.PI / 180;
double r_ChangeAngle = ChangeAngle * Math.PI / 180;

return (Math.Acos((-Math.Sin(r_dblParametr) - (Math.Sin(r_latitude) * Math.Sin(r_ChangeAngle))) / (Math.Cos(r_latitude) * Math.Cos(r_ChangeAngle))) * 180) / (15 * Math.PI);

}




و بالاخره منبع:http://www.p2p.dotnetsource.com/Default.aspx?g=posts&t=10493

unishomal
سه شنبه 20 مهر 1389, 10:56 صبح
به نظر شما این کد جواب میده؟!
کسی نمی خواد جواب بده؟