PDA

View Full Version : درخواست الگوریتم اوقات شرعی



jalalx
دوشنبه 20 دی 1389, 20:49 عصر
سلام
توی سایت گشتم اینجا (http://www.google.com/url?sa=t&source=web&cd=1&ved=0CBIQFjAA&url=http%3A%2F%2Fwww.barnamenevis.org%2Fforum%2Fsh owthread.php%3Ft%3D62237&rct=j&q=%20%D8%A7%D9%88%D9%82%D8%A7%D8%AA%20%D8%B4%D8%B1 %D8%B9%DB%8C%20%D8%AC%D8%A7%D9%88%D8%A7&ei=DzYrTaHLE9uT4AbGyJmLCg&usg=AFQjCNHN8raOXAOJYDZhaY3NtmKuR4vsEQ&sig2=WI3f5ggFyn5aqdVjzoKBhA&cad=rja)و اینجا (http://barnamenevis.org/showthread.php?2587-%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D8%A7%D9%88%D9%82%D8%A7%D8%AA-%D8%B4%D8%B1%D8%B9%DB%8C)رو پیدا کردم. یکی اولی به زبان جاوا بود که نشد به C# تبدیل کنمش. دومی به زبان دلفیه و یکیش دیگه هم وبی دات نت بود که متاسفانه بسیاد پیچیده نوشته شده! :افسرده: البته سورس های دیگه ای بودن که فقط برای سال 85 طراجی شده بودن، به زبان های دیگه البته!
راستی، سایت PrayTimes.org (http://praytimes.org/wiki/Prayer_Times_Calculation)هم یه سورس سی شارپ داده که بعد از تنظیم پارامتراش، باز هم برای ایران مشکل داره، من زاویه های طلوع خورشید رو و بعد از ظهر رو هم تنظیم کردم، ولی اختلافش زیاد بود! :عصبانی++: نمی شد با جمع و تفریق به جواب رسید! :گریه:
اگه کسی سورس سی شارپی داره بی زحمت اینجا آپلود کنه. :قلب:
خیلی ممنون. :قلب:

jalalx
سه شنبه 21 دی 1389, 11:55 صبح
وای! :گریه:
ینی هیچ کس تا بحال با C# یه برنامه ی محاسبه ی اوقات شرعی ننوشته؟ :افسرده:

jalalx
سه شنبه 21 دی 1389, 17:19 عصر
این پست بیش از 60 بار مشاهده شده! ولی هیچ کس نمی تونه کمک کنه؟! :گریه:

jalalx
چهارشنبه 22 دی 1389, 18:21 عصر
بذارید رکورد 100 مشاهده، بدون پاسخ رو هم بشکنیم!
هنوز منتظرم!

hadi-z
چهارشنبه 22 دی 1389, 21:23 عصر
سلام
من این کد رو پیدا کردم
ولی یکم مشکل داره
نمیدونم جرا


int myear = DateTime.Now.Year;
int mmonth = DateTime.Now.Month;
int mday = DateTime.Now.Day;


double Long = 29.9167;
double Lat = 31.2167;
double Zone = 2;
double Fajr_twilight = -18;
double Isha_twilight = -17.5;

double D = (367 * myear) - ((myear + (int)((mmonth + 9) / 12)) * 7 / 4) + (((int)(275 * mmonth / 9)) + mday - 730531.5);
// MessageBox.Show(this,"D: "+D+"\n");

double L = 280.461 + 0.9856474 * D;
L = More_Less_than360(L);

double M = 357.528 + (0.9856003) * D;
M = More_Less_than360(M);

double Lambda = L + 1.915 * Math.Sin(degToRad(M)) + 0.02 * Math.Sin(degToRad(2 * M));
Lambda = More_Less_than360(Lambda);
double Obliquity = 23.439 - 0.0000004 * D;

double Alpha = radToDeg(Math.Atan((Math.Cos(degToRad(Obliquity)) * Math.Tan(degToRad(Lambda)))));
Alpha = More_Less_than360(Alpha);
Alpha = Alpha - (360 * (int)(Alpha / 360));
Alpha = Alpha + 90 * (Math.Floor(Lambda / 90) - Math.Floor(Alpha / 90));

double ST = 100.46 + 0.985647352 * D;
double Dec = radToDeg(Math.Asin(Math.Sin(degToRad(Obliquity)) * Math.Sin(degToRad(Lambda))));
double Durinal_Arc = radToDeg(Math.Acos((Math.Sin(degToRad(-0.8333)) - Math.Sin(degToRad(Dec)) * Math.Sin(degToRad(Lat))) / (Math.Cos(degToRad(Dec)) * Math.Cos(degToRad(Lat)))));

double Noon = Alpha - ST;
Noon = More_Less_than360(Noon);


double UT_Noon = Noon - Long;


////////////////////////////////////////////
// Calculating Prayer Times Arcs & Times //
//////////////////////////////////////////

// * 2) Isha Time
double Local_Noon = UT_Noon / 15 + Zone;

// Asr Shafii
//double Asr_Alt =radToDeg(Math.Atan(2+Math.Tan(degToRad(Lat - Dec))));
// Asr Hanafi
double Asr_Alt = radToDeg(Math.Atan(1 + Math.Tan(degToRad(Lat - Dec))));
double Asr_Arc = radToDeg(Math.Acos((Math.Sin(degToRad(90 - Asr_Alt)) - Math.Sin(degToRad(Dec)) * Math.Sin(degToRad(Lat))) / (Math.Cos(degToRad(Dec)) * Math.Cos(degToRad(Lat)))));
Asr_Arc = Asr_Arc / 15;
// * 3) Asr Time
double Asr_Time = Local_Noon + Asr_Arc;

double Sun_Rise = Local_Noon - (Durinal_Arc / 15);
// * 4) Maghrib Time
double Sun_Set = Local_Noon + (Durinal_Arc / 15);

double Esha_Arc = radToDeg(Math.Acos((Math.Sin(degToRad(Isha_twiligh t)) - Math.Sin(degToRad(Dec)) * Math.Sin(degToRad(Lat))) / (Math.Cos(degToRad(Dec)) * Math.Cos(degToRad(Lat)))));
// * 5) Isha Time
double Esha_Time = Local_Noon + (Esha_Arc / 15);
// * 1) Fajr Time
double Fajr_Arc = radToDeg(Math.Acos((Math.Sin(degToRad(Fajr_twiligh t)) - Math.Sin(degToRad(Dec)) * Math.Sin(degToRad(Lat))) / (Math.Cos(degToRad(Dec)) * Math.Cos(degToRad(Lat)))));
double Fajr_Time = Local_Noon - (Fajr_Arc / 15);

hadi-z
چهارشنبه 22 دی 1389, 21:30 عصر
مجددا سلام

یه نمونه پیدا کردم که انگار داره درست کار میکنه

ببین، شاید بکارت اومد!!!!!!!

Reza,M
پنج شنبه 23 دی 1389, 01:07 صبح
مجددا سلام

یه نمونه پیدا کردم که انگار داره درست کار میکنه

ببین، شاید بکارت اومد!!!!!!!
دوست عزيز مال كدوم شهره ؟

Reza,M
پنج شنبه 23 دی 1389, 01:08 صبح
منم زياد گشتم اما يك برنامه دقيق پيدا نكردم !
اگه موافقيد خودمون شروع كنيم؟

jalalx
پنج شنبه 23 دی 1389, 10:34 صبح
مجددا سلام

یه نمونه پیدا کردم که انگار داره درست کار میکنه

ببین، شاید بکارت اومد!!!!!!!

دستت طلا! من کل اینترنت رو زیر و رو کردم، بزار اینو هم تست می کنم. ممنون :قلب:




اگه موافقيد خودمون شروع كنيم؟


عزیزم، من عجله دارم، و الا اگه وقتی پیش اومد، بعد از امتحانات، باشه، روی چشم، روی من حساب کن! :لبخندساده:

jalalx
پنج شنبه 23 دی 1389, 10:47 صبح
وای! من اینو دیده بودم، خطا داره! :گریه:
خطاش بخاطر پس و پیش بودن ساعت نیست! خطاش محاسباتیه! مثلا برای مشهد:


string[] userTimes = calc.getPrayerTimes(DateTime.Now, 59.61, 36.3, 3);
عددهاش با سایت موسسه ی ژئوفیزیک دانشگاه تهران (http://calendar.ut.ac.ir/Fa/Software/RunCalOghat.asp)، حدود 20 دقیقا یا شاید هم بیشتر، پس و پیشه! تغییر دادن TimeZone فقط روی مقدار ساعت تاثیر میذاره. :گریه:

hadi-z
پنج شنبه 23 دی 1389, 13:42 عصر
آقا من چند تا تولز پیدا کردم برای این کار
ولی نحوه استفادشو نمیدونم

http://praytimes.org/wiki/Code

http://djihed.com/minbar

http://sourceforge.net/projects/arabeyes/files/ITL%20itools/

http://sourceforge.net/projects/arabeyes/files/ITL%20Library%20%28libitl%29/

jalalx
جمعه 24 دی 1389, 00:32 صبح
مرسی، ولی اولیشو دیده بودم. بقیش به زبان سی نوشته شده، واسه لینوکس، مطمئن نیستم درست باشن که بعد تبدیل کنمشون :گریه:

CYCLOPS
جمعه 24 دی 1389, 08:16 صبح
سلام
بحث جالبیه امیدوارم به نتیجه برسه
دوست عزیز به نظر من همون http://praytimes.org/wiki/Code صد در صد درست هست چون اگر دقت کرده باشید کدهای این سایت چهار ورژن مختلف هست
نسخه 0.9 نسخه 1.0 و نسخه 2.0 و 2.1 که توضیحاتی که تو سایت داده برای ساخت پلاگین فایرفاکس از نسخه اولیه یعنی 0.9 استفاده شده من پلاگینش رو نصب کردم و تنظیمات رو انجام دادم و همون طور که تو تصویر زیر میبینید اوقات رو درست استخراج کرده

65038

وقتی نسخه 0.9 کد درست بوده پس حتما نسخه های بعدی هم درسته
احتمالا مشکلی که هست تو تبدیل کد به سی شارپ به وجود آمده
نظر من اینه که چون الگوریتم کار درست هست خودتون با استفاده از فرمول های گفته شده تو سایت نسخه سی شارپ رو بنویسید
+ نسخه شماره 1.0 که در حال حاضر سی شارپش موجود هست نیمه شب شرعی نداره
پس به نظر من یه کلاس جدید نوشته بشه بهتر هست

موفق باشید :چشمک:

CYCLOPS
جمعه 24 دی 1389, 09:31 صبح
دوستان من بازم گشتم همون الگوریتم http://praytimes.org/wiki/Code درست و دقیق هست برای اطمینان سمپل آنلاین سایت رو با این مقادیر چک کنید (برای شهر تهران) :
ابتدا به آدرس زیر برید
http://praytimes.org/code/v2/js/examples/monthly.htm
تنظیمات :
Latitude:
35.70
Longitude:
51.42
Time Zone:
+03.5
Method:
Institute of Geophysics, University of Tehran
من جواب ها را با این فایل که متعلق به سایت مرکز ژئوفیزیک دانشگاه تهران هست (برای شهر تهران) مقایسه کردم و کاملا یکسان بود
http://calendar.ut.ac.ir/Fa/Prayers/Data/89/Tehran89.pdf

موفق باشید :چشمک:

jalalx
جمعه 24 دی 1389, 16:36 عصر
دوستان من بازم گشتم همون الگوریتم http://praytimes.org/wiki/Code درست و دقیق هست برای اطمینان سمپل آنلاین سایت رو با این مقادیر چک کنید (برای شهر تهران) :
ابتدا به آدرس زیر برید
http://praytimes.org/code/v2/js/examples/monthly.htm
تنظیمات :
Latitude:
35.70
Longitude:
51.42
Time Zone:
+03.5
Method:
Institute of Geophysics, University of Tehran
من جواب ها را با این فایل که متعلق به سایت مرکز ژئوفیزیک دانشگاه تهران هست (برای شهر تهران) مقایسه کردم و کاملا یکسان بود
http://calendar.ut.ac.ir/Fa/Prayers/Data/89/Tehran89.pdf

حذف کردن تشکر شما (http://barnamenevis.org/post_thanks.php?do=post_thanks_remove_user&p=1194234)موفق باشید :چشمک:

ببخشید، یه سوال، شما مقدار TimeZone رو چطوری 3.5+ دادین؟ اون که مقدار double قبول نمی کنه(تو کد C#)، نوعش int تعریف شده! ینی نوعشو تغییرش بدم؟؟؟

CYCLOPS
جمعه 24 دی 1389, 18:02 عصر
احتمالا مشکلی که هست تو تبدیل کد به سی شارپ به وجود آمده



ببخشید، یه سوال، شما مقدار TimeZone رو چطوری 3.5+ دادین؟ اون که مقدار double قبول نمی کنه(تو کد C#)، نوعش int تعریف شده! ینی نوعشو تغییرش بدم؟؟؟

همون طور که قبلا گفتم احتمالا کد سی شارپ مشکل داره (وقتی از جاوا اسکریپت به سی شارپ ترجمه شده این اشتباه صورت گرفته) چون بحث و سوال تاپیک در مورد الگوریتم بود من گفتم الگوریتم این سایت درست هست برای تست هم اون مقادیر که گفتم رو تو این صفحه بزنید و نتایج رو ببینید :
http://praytimes.org/code/v2/js/examples/monthly.htm

بنده خودم در اولین فرصت سعی میکنم نسخه 2 این کد رو به سی شارپ تبدیل کنم و همین جا در اختیار دوستان قرار بدم چون خودم هم شخصا خیلی بهش احتیاج دارم
موفق باشید :چشمک:

jalalx
شنبه 25 دی 1389, 09:55 صبح
ممنون میشم، اگه بشه، خودم بعد امتحانات یه کلاس تر و تمیز ازش طراحی میکنم! :چشمک:

mujpir
دوشنبه 17 مهر 1391, 12:53 عصر
سلام
زمان زیادی گذشته ولی شاید بعضی دوستان هنوز دنبال جوابند .
کد C#‎ که در سایت PrayTimes (http://praytimes.org/wiki/Code) قرار داده شده درست کار می کنه فقط نیاز به چند تا اصلاح داره .
1 . متغیر timeZone را در فایل PrayTime.cs به double یا float تغییر بدید . همچنین پارامتر timeZone مربوط به متود getDatePrayerTimes .
2 . در فایل sample.cs :
متغیر tz رو به float یا double تغییر بدید .
در خط tz = (float) TimeZone.CurrentTimeZone.GetUtcOffset(new DateTime(y, m, d)).Hour ; به جای Hour از TotalHour استفاده کنید تا مقدار ساعت رو به صورت double یا float دریافت کنید . بنا براین به جای مثلا عدد 3 ، عدد 3.5 رو دریافت کنید .
در متود getDatePrayerTimes(y, m, d, lo, la, tz); جای la را با lo عوض کنید .

همین . موفق باشید .