PDA

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



Mr'Jamshidy
شنبه 26 اسفند 1391, 12:43 عصر
سلام

آقا من بعد از کلی جستجو تو اینترنت وقتی که دیگه کلا نا امید بودم این کد رو برای محاسبه اوقات شرعی به زبان ویبی پیدا کردم و با یکم دستکاری برای دات نت قابل استفاده،

اما مشکل اینجاست که این کد نسبت به سایت www.Owghat.com در بعضی موارد 1 تا 2 دقیقه اختلاف داره که البته زیاد مهم نیست ولی اگر حل بشه خیلی بهتره

و مشکل دوم اینه که

اذان صبح: دارد
طلوع خورشید: دارد
اذان ظهر: دارد
اذان عصر: ندارد
غروب خورشید: دارد
اذان مغرب: دارد
نیمه شب شرعی: ندارد

اینا رو چی کار کنم؟
کلی تو همین فروم گشتم ولی یا چیز به درد بخوری نبود یا همه لینک ها خراب شده بود
من هم نمیتونم محاسبه کنم و خودم برای الگوریتم بنویسم

دیگه اگر لطف کنید ممنون میشم

یا حق

-------

کد:
Module Owghat
Private lgs() = {0, 49.7, 48.3, 45.07, 51.64, 48.68, 46.42, 57.33, 56.29, 50.84, 59.21, 46.28, 51.41, 48.34, 49.59, 60.86, 48.5, 53.06, 53.39, 47, 50.86, 52.52, 50, 50.88, 57.06, 47.09, 54.44, 59.58, 48.52, 51.59, 54.35}
Private lats() = {0, 34.09, 38.25, 37.55, 32.68, 31.32, 33.64, 37.47, 27.19, 28.97, 32.86, 38.08, 35.7, 33.46, 37.28, 29.5, 36.68, 36.57, 35.58, 35.31, 32.33, 29.62, 36.28, 34.64, 30.29, 34.34, 36.84, 36.31, 34.8, 30.67, 31.89}

Private Structure Behzad
Dim XX As Double
Dim YY As Double
End Structure

Structure TimeFormat
Dim Hour_ As Double
Dim Minute_ As Double
End Structure

Structure RetTimeStr
Dim Azan_Hobh As [String]
Dim Tolooe_Khorshid As [String]
Dim Azane_Zohr As [String]
Dim Ghoroobe_Khoeshid As [String]
Dim Azan_Maghreb As [String]
End Structure

Structure RetTime
Dim Azan_Hobh As TimeFormat
Dim Tolooe_Khorshid As TimeFormat
Dim Azane_Zohr As TimeFormat
Dim Ghoroobe_Khoeshid As TimeFormat
Dim Azan_Maghreb As TimeFormat
Dim StringVersion As RetTimeStr
End Structure

Const PI As Double = 3.14159265358979

Function ProcessALL(m As Double, d As Double, lg As Double, lat As Double) As RetTime
'Latitude, Longitude
Dim ep As Behzad, zr As Double, delta As Double, ha As Double
Dim t1 As Double, t2 As Double, t3 As Double, t4 As Double
Dim Result As RetTime

m = m + 1
d = d + 1
ep = sun(m, d, 4, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(108, delta, lat)
t1 = rRound(zr - ha, 24)
ep = sun(m, d, t1, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(108, delta, lat)
t1 = rRound(zr - ha, 24)
Result.Azan_Hobh = hms2(t1)
Result.StringVersion.Azan_Hobh = hms(t1)
'
' t2= Sun rise
'
ep = sun(m, d, 6, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(90.833, delta, lat)
t2 = rRound(zr - ha, 24)
ep = sun(m, d, t2, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(90.833, delta, lat)
t2 = rRound(zr - ha, 24)
Result.Tolooe_Khorshid = hms2(t2)
Result.StringVersion.Tolooe_Khorshid = hms(t2)
'
' zr=Zohr
'
ep = sun(m, d, 12, lg)
ep = sun(m, d, ep.XX, lg)
zr = ep.XX
Result.Azane_Zohr = hms2(zr)
Result.StringVersion.Azane_Zohr = hms(zr)
'
' t2= Sun set
'
ep = sun(m, d, 18, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(90.833, delta, lat)
t3 = rRound(zr + ha, 24)
ep = sun(m, d, t3, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(90.833, delta, lat)
t3 = rRound(zr + ha, 24)
Result.Ghoroobe_Khoeshid = hms2(t3)
Result.StringVersion.Ghoroobe_Khoeshid = hms(t3)
'
' t2= Maghreb
'
ep = sun(m, d, 18.5, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(94.3, delta, lat)
t4 = rRound(zr + ha, 24)
ep = sun(m, d, t4, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(94.3, delta, lat)
t4 = rRound(zr + ha, 24)
Result.Azan_Maghreb = hms2(t4)
Result.StringVersion.Azan_Maghreb = hms(t4)

Return Result
End Function

Public Sub coord(citiIndex As Long, X As Double, Y As Double)
If citiIndex = 0 Then
X = 0
Y = 0
Else
X = lgs(citiIndex)
Y = lats(citiIndex)
End If
End Sub

Private Function sun(m As Double, ByVal d As Double, h As Double, lg As Double) As Behzad
Dim mm As Double, l As Double, lst As Double, e As Double, omega As Double, ep As Double, ed As Double, u As Double
Dim v As Double, theta As Double, delta As Double, alpha As Double, ha As Double, zr As Double
Dim i As Long
If m < 7 Then
d = 31 * (m - 1) + d + h / 24
Else
d = 6 + 30 * (m - 1) + d + h / 24
End If
mm = 74.2023 + 0.98560026 * d
l = -2.75043 + 0.98564735 * d
lst = 8.3162159 + 0.065709824 * Floor(d) + 1.00273791 * 24 * mod2(d, 1) + lg / 15
e = 0.0167065
omega = 4.85131 - 0.052954 * d
ep = 23.4384717 + 0.00256 * cosd(omega)
ed = 180 / PI * e
u = mm
For i = 1 To 4
u = u - (u - ed * sind(u) - mm) / (1 - e * cosd(u))
Next
v = 2 * atand(tand(u / 2) * Math.Sqrt((1 + e) / (1 - e)))
theta = l + v - mm - 0.00569 - 0.00479 * sind(omega)
delta = asind(sind(ep) * sind(theta))
'
alpha = 180 / PI * ATan2(cosd(theta), cosd(ep) * sind(theta))
'
If alpha >= 360 Then alpha = alpha - 360
ha = lst - alpha / 15
zr = rRound(h - ha, 24)

sun.XX = zr
sun.YY = delta
End Function

Private Function loc2hor(z As Double, d As Double, p As Double)
loc2hor = acosd((cosd(z) - sind(d) * sind(p)) / cosd(d) / cosd(p)) / 15
End Function
Private Function rRound(X As Double, a As Double)
Dim tmp As Double
tmp = mod2(X, a)
If tmp < 0 Then tmp = tmp + a
rRound = tmp
End Function

Private Function hms(X As Double) As String
Dim h As Double, mp As Double, m As Double, ss As Double
Dim s As String
X = Floor(3600 * X)
h = Floor(X / 3600)
mp = X - 3600 * h
m = Floor(mp / 60)
ss = Floor(mp - 60 * m)

If h < 10 Then s = "0" Else s = ""
s = s & h & ":"
If m < 10 Then s = s & "0"
s = s & m & ":"
If ss < 10 Then s = s & "0"
s = s & ss

Return s
End Function

Private Function hms2(X As Double) As TimeFormat
Dim h As Double, mp As Double, m As Double, ss As Double
Dim s As String, Result As TimeFormat

X = Floor(3600 * X)
h = Floor(X / 3600)
mp = X - 3600 * h
m = Floor(mp / 60)
ss = Floor(mp - 60 * m)

Result.Hour_ = h
Result.Minute_ = m

Return Result
End Function

Private Function sind(X)
sind = Math.Sin(PI / 180 * X)
End Function
Private Function cosd(X)
cosd = Math.Cos(PI / 180 * X)
End Function
Private Function tand(X)
tand = Math.Tan(PI / 180 * X)
End Function
Private Function atand(X)
atand = Math.Atan(X) * 180 / PI
End Function
Private Function asind(X As Double)
asind = Math.Asin(X) * 180 / PI
End Function
Private Function acosd(X As Double)
acosd = Math.Acos(X) * 180 / PI
End Function
Private Function Floor(X As Double) As Long
Floor = Int(X)
End Function
Private Function ASin(X As Double) As Double
ASin = Math.Atan(X / Math.Sqrt(-X * X + 1.01))
End Function
Private Function ACos(X As Double) As Double
ACos = Math.Atan(-X / Math.Sqrt(-X * X + 1.01)) + 2 * Math.Atan(1)
End Function

Private Function ATan2(ByVal X As Double, ByVal Y As Double) As Double
On Error Resume Next
If X = 0 Then
If Y = 0 Then
ATan2 = 1 / 0
ElseIf Y > 0 Then
ATan2 = PI / 2
Else
ATan2 = -PI / 2
End If
ElseIf X > 0 Then
If Y = 0 Then
ATan2 = 0
Else
ATan2 = Math.Atan(Y / X)
End If
Else
If Y = 0 Then
ATan2 = PI
Else
ATan2 = (PI - Math.Atan(Math.Abs(Y) / Math.Abs(X))) * Math.Sign(Y)
End If
End If
End Function
Private Function mod2(a As Double, b As Double) As Double
mod2 = a - (b * Int(a / b))
End Function
End Module

Mr'Jamshidy
شنبه 26 اسفند 1391, 21:26 عصر
عجب!

یعنی از 40 نفری که تاپیک رو دیدن کسی بلد نبود؟

zahedi121
یک شنبه 27 اسفند 1391, 07:29 صبح
سلام
این تاپیکها را نگاه کنید :
1 (http://barnamenevis.org/showthread.php?349755-بدست-آوردن-اوقات-شرعی) و 2 (http://barnamenevis.org/showthread.php?79093-فرمول-اوقات-شرعی)
یک چند تا توضیح کوچک :
اذان عصر هم مگر داریم ؟! شاید منظورتون وقتی که مستحبه نماز عصر خونده بشه . اینطور ساعات خیلی اختلافیه ( به روایات بر میگرده ) چون دیگه به نجوم کار نداره.
نیمه شب شرعی هم اگر به یکی دوتا سایت مراجع عظام تقلید مراجعه کنید متوجه می شوید که در تعریف ( با توجه به اختلاف روایات ) به یک نظر واحد نمی رسید . اینکه وسط غروب آفتاب تا طلوع آفتاب است یا بین اذان مغرب و اذان صبح و ...
در خصوص یک تا دو دقیقه نمی تونید به نتیجه برسید چون اونهم به تعریفها و برداشت ها بر می گردد ( از تعریفهای علمی مانند قطرها و .. تا تعریفهای روایی ) . شما یک سرچی در خصوص سایتهایی که این اوقات را تعیین می کنند انجام بدید ببینید چند تاشون با هم یک عدد را گذاشتند . برای همین در استفتائی که در اکثر دانشگاهها ( زمان دانشجویی ما که بود !) هست اکثر مراجع عظام نظرشون اینه که یک مقداری احتیاط کنیم یعنی اگر روزه می خواهیم بگیریم یک 5 دقیقه قبل از اذان دست بکشیم و 5 دقیقه بعد از اذان نماز بخونیم.

شرمنده می دونم تالار برنامه نویسیه ولی خب سوال شرعیه دیگه :لبخندساده: . چون یک زمانی خیلی دنبال پیدا کردن این موضوع بودم یک مقدار اطلاعات دارم گفتم در اختیار بگذارم. سوالی بود در خدمتیم.
موفق باشید

Mr'Jamshidy
یک شنبه 27 اسفند 1391, 22:40 عصر
سلام
این تاپیکها را نگاه کنید :
1 (http://barnamenevis.org/showthread.php?349755-بدست-آوردن-اوقات-شرعی) و 2 (http://barnamenevis.org/showthread.php?79093-فرمول-اوقات-شرعی)
یک چند تا توضیح کوچک :
اذان عصر هم مگر داریم ؟! شاید منظورتون وقتی که مستحبه نماز عصر خونده بشه . اینطور ساعات خیلی اختلافیه ( به روایات بر میگرده ) چون دیگه به نجوم کار نداره.
نیمه شب شرعی هم اگر به یکی دوتا سایت مراجع عظام تقلید مراجعه کنید متوجه می شوید که در تعریف ( با توجه به اختلاف روایات ) به یک نظر واحد نمی رسید . اینکه وسط غروب آفتاب تا طلوع آفتاب است یا بین اذان مغرب و اذان صبح و ...
در خصوص یک تا دو دقیقه نمی تونید به نتیجه برسید چون اونهم به تعریفها و برداشت ها بر می گردد ( از تعریفهای علمی مانند قطرها و .. تا تعریفهای روایی ) . شما یک سرچی در خصوص سایتهایی که این اوقات را تعیین می کنند انجام بدید ببینید چند تاشون با هم یک عدد را گذاشتند . برای همین در استفتائی که در اکثر دانشگاهها ( زمان دانشجویی ما که بود !) هست اکثر مراجع عظام نظرشون اینه که یک مقداری احتیاط کنیم یعنی اگر روزه می خواهیم بگیریم یک 5 دقیقه قبل از اذان دست بکشیم و 5 دقیقه بعد از اذان نماز بخونیم.

شرمنده می دونم تالار برنامه نویسیه ولی خب سوال شرعیه دیگه :لبخندساده: . چون یک زمانی خیلی دنبال پیدا کردن این موضوع بودم یک مقدار اطلاعات دارم گفتم در اختیار بگذارم. سوالی بود در خدمتیم.
موفق باشید

سلام

نگاه که کردم اما بیشتر گیج شدم قبل از این که پست بدم اون تاپیک ها رو دیده بودم

والا من نمیدونم اذان عصر هم داریم یا نه من خودم مغرب و عشا شنیده بودم اما عصر نه ولی وقتی این سایت رو دیدم به شک افتادم http://www.owghat.com/

نه اتفاقا بحث کاملا برنامه نویسیه و هیچ ربطی به شرع و اصل و اصول و فروع و ... نداره

ممنون

zahedi121
دوشنبه 28 اسفند 1391, 06:20 صبح
سلام
مگه اوقات شرعی بدون شرع هم میشه ؟! مثل اینه که بگیم من میخوام یک نرم افزار درباره تاریخ قاجار بنویسم اصلا هم به این کتابهای تاریخی و مورخان کار ندارم ! به هر حال باید حداقل در تعریف اوقاتی که میخواهید حسابشان کنید به شرع مراجعه کنید. نمیشه نیمه شب شرعی را بدون اینکه بدونیم به چی میگن نیمه شب شرعی محاسبه کرد! میشه ؟!
بگذریم. برای اینکه مطمئن باشید یک فرمول خاص حتی از نظر علمی نمی تونید پیدا کنید ( چون در بحث نجوم و قطر زمین و مداری که از هر شهر می گذره و .. بین علمای نجوم هم اختلافه ) تصاویر زیر را نگاه کنید ، این تصاویر اوقات شرعی کرمان برای امروز را از سایتهای مختلف نشان میدهد :
101607
101609101610101611101608

چرا اینقدر اعداد مختلفند ؟! اگر فرض کنیم تعریف اوقات یکی باشه ( که نیست ) اختلاف برای نحوه انتخاب مداری که از شهر میگذرد ( مثلا تهران از غرب تا شرق یک افق داره ؟ ) و بحثهای ظریف نجومی باقی می ماند.

به هر حال امیدوارم بقیه دوستان اهل فن هم شرکت کنند. تا بیشتر یاد بگیریم. همانطور که گفتم من که تقریبا سه چهار ماهی دنبال این موضوع بودم آخر به نتیجه نرسیدم.

متشکرم - موفق باشید

Mr'Jamshidy
دوشنبه 28 اسفند 1391, 09:05 صبح
اگر فرمول محاسبه "موسسه ژئوفيزيك دانشگاه تهران" باشه هم خوبه
کسی اونو نداره؟

-----

در ضمن من طبق آموزش این سایت رفتم جلو

http://praytimes.org/wiki/Prayer_Times_Calculation

آخرش یک نتیجه چرت و پرت تحویلم داد

roya.raha
دوشنبه 28 اسفند 1391, 09:41 صبح
من هم با صحبتهای zahedi121 موافقم در لینک زیر هم توضیحاتی هست :
http://noorcenter.com/index.php/oghat

اگر فرمول ژئوفیزیک تهران را پیدا کردید من هم نیاز دارم . چون بصورت توافقی الان اون را ملاک می گیرند.

morteza561
دوشنبه 28 اسفند 1391, 09:59 صبح
بسم الله الرحمن الرحیم

در مورد وقت نماز عصر که فرمودید، بله. از نظر علمای تشیع جدا خواندن نماز های ظهر و عصر و همچنین مغرب و عشا مستحب است. اما از نظر برادران اهل سنت این موضوع واجبه. پس وقت نماز عصر بیشتر برای این عزیزان کاربرد داره.

در مورد ژئوفیزیک هم، فکر می کنم پارسال بود که پیگیر این قضیه بودم. آخرش با هزار زحمت تونستم با یکی از برنامه نویسای موسسه تبیان صحبت کنم و ایشون گفتند که حتی ژئوفیزیک هم همه اعدادش با فرمول بدست نمیاد. بلکه هر سال با در نظر گرفتن هزار و یک شرط، مثل شرایط آب و هوایی و ... یه مقادیری به اون زمان هایی که از فرمول بدست میاد کم یا اضافه می کنند. چون اگر میشد که فقط با فرمول بدست بیاد، از الان تا حداقل 3 - 4 سال آینده رو میدادن. اما همونطور که میبینید فقط میتونند تا یک سال آینده رو استخراج کنند.

امیدوارم کمکتون کرده باشم

و من الله التوفیق ...

Hossis
شنبه 17 فروردین 1392, 16:02 عصر
اذان عصر: ندارد

نیمه شب شرعی: ندارد

اینا رو چی کار کنم؟
چیزی به نام اذان عصر که نداریم , اما نیمه شب شرعی رو باید بر اساس تعریف شرعی اون محاسبه کرد.

نيمه شب شرعي نصف مابين غروب آفتاب و طلوع صبح است(استفتائات)
بر این اساس, می تونید غروب آفتاب رو تا اذان صبح محاسبه کرده و مقدارش رو به حسب دقیقه نصف کنید و به اذان مغرب بیفزایید.
فرض کنید که غروب , ساعت 6:30 دقیقه و اذ ان صبح ساعت 5:17 دقیقه باشد, بر این اساس, مجموع شب می شود :

(12-6.30)+5.17=10:47
10:47/2=5:23
6:30+5:23=11:53
بنابراین نیمه شب شرعی در این فرض, ساعت یازده و پنجاه و سه دقیقه عصر خواهد بود.
یک سری هم به این وبلاگم که نرم افزار اوقات شرعی رو قبلا ساختم (با محاسبه نیمه شب شرعی) بندازید و با نتیجه سایت های دیگه مقایسه کنید.

zahedi121
شنبه 17 فروردین 1392, 23:05 عصر
برای محاسبه دقیق اوقات قبلا صحبت شد ، ولی در خصوص نیمه شب شرعی به تصویر زیر نگاه کنید تا کاملا اختلاف تعاریف مشخص شود ( ضمنا من این تصویر را از یکی از وبلاگهای احکام برداشتم برای اطمینان حتما به سایت مرجع تقلیدتان یا رساله های عملیه مراجعه کنید ) :
102437