اريد كيفية برجة المعادلة
D =((367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d-730531.5)
انا بحاجة ماسة الى برمجتها
اريد كيفية برجة المعادلة
D =((367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d-730531.5)
انا بحاجة ماسة الى برمجتها
تم تعديل هذه المشاركة بواسطة Xacker في 28 مايو 2007 في 01:13
تريد الكيفية, أم تريد المعادلة بالأسمبلي.. وهل لي أن أسألك بأي لغة تنوي استخدام هذه المعادلة؟
;D =((367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d-730531.5) .data? D dd ? Y dw ? M dw ? d dw ? fpoint dd 730531.5 .code start: mov eax,Y imul 367 push eax mov eax,M add eax,9 idiv 12 push eax pop ebx mov eax,Y add eax,ebx push eax mov eax,7 idiv 4 pop ebx imul ebx mov ebx,eax pop eax sub eax,ebx push eax mov eax,M idiv 9 imul 275 pop ebx add eax,ebx add eax,d ; Floating Point Units time fild fpoint; st(0)=fpoint mov D,eax fild D; st(0)=D,st(1)=fpoint fisub st(0),st(1); st(0)=D,st(1)=fpoint > st(0)=result fist D; D=st(0) end start
إن شاء الله صحيحة, لا أستطيع اختبارها على هذا النظام.
لا تنسى, تحتاج الى اضافة مكتبة fpu.inc / fpu.lib
تم تعديل هذه المشاركة بواسطة Xacker في 28 مايو 2007 في 01:44
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
شكرا لك اخي على هذا التدخل
هذا جزء من معادلات اوقات الصلاة
واريد برمجتها بلغة الاسمبلي
هذا مشروع تخرجي ساعة الكترونية واوقات الصلاة
سيتم بعون الله برمجة المعادلة في الميكروكنترلور
المعادلات هي
حساب مواقيت الصلاة الشرعية
لأى مكان بالعالم
الأخوة الكرام نظرا لدقة أمر المواقيت وخاصة مواقيت الصلاة الشرعية فقد وضعت هنا معادلات بسيطة لحساب مواقيت الصلاة الشرعية ولم أضف فىالمعادلات أثر إرتفاع الموقع عن سطح البحر أو أثر عوامل الإنكسار أو عناصر الحرارة والضغط الجوى وغيرها من القيم التى نستخدمها فى الحسابات إذا أردنا الحساب بدقة تصل إلى كسور بسيطة من الثانية ولكنى فضلت تبسيط المعادلات حتى يتمكن اى شخص من حساب المواقيت بدقة وهى تعطى نتائج جيدة ودقيقة جدا
العناصر الملطلوبة للحساب هى :
خط الطول الجغرافى للمكان المطلوب الحساب له ورمزه Long
خط العرض الجغرافى للمكان المطلوب الحساب له ورمزه Lat
فرق التوقيت الموقعى عن خط توقيت جرينتش
العام والشهر واليوم المطلوب الحساب له
فى حساب طول الشمس وموقعها فضلت هنا التبسيط ولم أكتب المعادلات التى نستخدمها فى حساب الظواهر الكونية بل ايضا فضلت التبسيط قد ما استطعت وهنا موقع الشمس بحسب مركزية الأرض Geocentric وهى معادلات بسيطة جدا ولكنها دقيقة بحول الله وقوته
أولا نحسب طول " موقع الشمس " للحصول على الميل الزاوى والمطلع المستقيم المستخدم بمعادلات مواقيت الصلاة
نحسب اليوم الجوليانى ورمزه D من المعادلة :
D =((367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d-730531.5)
مع ملاحظة أن Y = Year = العام
و M = Month = الشهر
و d= Day = اليوم
وهذا هو العام والشهر واليوم المطلوب له الحساب
نحسب طول الشمس الوسطى ورمزه L من المعادلة
L = 280.461+0.9856474*D
مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360°
ثم نحسب حصة الشمس الوسطى ورمزه M من المعادلة
M = 357.528+0.9856003*D
مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360°
ثم نحسب طول الشمس البروجى ورمزه Lambda من المعادلة
(Lambda = L +1.915*SIN(M)+0.02*SIN(2*M
مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360°
ثم نحسب ميل دائرة البروج ورمزها Obliquity من المعادلة
Obliquity = 23.439-0.0000004*D
ثم نحسب المطلع المستقيم ورمزه Alpha من المعادلة
((Alpha =ATAN (COS(Obliquity)*TAN(Lambda
مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360° بالمعادلة
(Alpha = Alpha - (360*INT(Alpha /360
ثم نعدل المطلع المستقيم
Alpha = Alpha + 90 * ( TRUNC ( Alpha / 90 ) -TRUNC(Alpha / 90))
نحسب الزمن النجمى ورمزه ST بالدرجات الزاوية من المعادلة
ST =100.46 + 0.985647352 *D
ثم نحسب ميل الشمس الزاوى ورمزه Decمن المعادلة
((Dec =ASIN(SIN (Obliquity )*SIN(Lambda
نحسب زوال الشمس الوسطى noon من المعادلة
Noon = Alpha - ST
مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360° بالمعادلة
ثم الزوالى العالمى UT Noonمن المعادلة
UT Noon = Noon - Long
حيث أن Long هو خط الطول الجغرافى للمكان
ثم الزوال المحلى Local Noonبالمعادلة وهو وقت صلاة الظهر
Local Noon = UT Noon /15 + Zone
حيث أن Zone هو فرق التوقيت العالمى
نحسب وقت صلاة العصر الأول وهو المذهب الشافعى " وهو معمول به فى كثير من الأقطار "
نحسب إرتفاع الشمس لوقت صلاة العصر Asr Altمن المعادلة
((Asr Alt = ATAN (1+ TAN( Lat - Dec
حيث أن Lat هو خط العرض الجغرافى
و Dec هو ميل الشمس الزاوى
وإذا أردتها لوقت صلاة العصر الثانى " المذهب الحنفى " يكون من المعادلة :
((Asr Alt =ATAN(2+TAN(Latitude - Dec
ثم نحسب قوس الدائر أى الوقت المتبقى من وقت الظهر حتى صلاة العصر قوس العصر Asr Arc من المعادلة :
Asr Arc =ACOS ((SIN(90- Asr Alt )-SIN(Dec)*SIN(Lat))/(COS(Dec)*COS(Lat)))
الناتج هنا بالدرجات الزاوية يحول لزمن بالقسمة على 15
Asr Arc = Asr / 15
فيكون وقت صلاة العصر Asr Time من المعادلة
Asr Time = Local Noon + Asr Arc
نحسب وقت شروق الشمس وغروبها من المعادلة :
نحسب نصف قوس النهار Durinal Arcمن المعادلة
Durinal Arc=ACOS ((SIN(-0.8333 )-SIN(Dec)*SIN(Lat))/(COS(Dec)*COS(Lat)))
وقت الشروق Sun Rise
(Sun Rise = Local Noon - (Durinal Arc / 15
وقت الغروب Sun Set
(Sun Set = Local Noon + (Durinal Arc /15
نحسب وقت صلاة العشاء من المعادلة
اولا نحسب فضل الدائر وهو الوقت المتبقى من وقت صلاة الظهر إلى وقت العشاء Esha Arc
Esha Arc = ACOS ((SIN(-18 )-SIN(Dec)*SIN(Lat))/(COS(Dec)*COS(Lat)))
فيكون وقت صلاة العشاء Esha Time
(Esha Time = Local Noon +( Esha Arc /15
نحسب وقت صلاة الفجر من المعادلة
أولا نحسب فضل دائر الفجر وهو الوقت المتبقى من وقت صلاة الفجر حتى وقت صلاة الظهر Fajr Arc
Fajr Arc = ACOS ((SIN(-18 )-SIN(Dec)*SIN(Lat))/(COS(Dec)*COS(Lat)))
فيكون وقت صلاة الفجر Fajr Time
(Fajr Time = Local Noon – (Fajr Arc /15
لك مني خالص الاحترام والتقدير
جزاك الله عنا خيرا وزادك من علمه
ونفعنا الله بك
واسال الله تعالى ان يجعلها في ميزان حسناتك
بارك الله بك على هذا الشرح الوافي
ستضطر بدون شك الى استخدام FPU في معادلاتك من اجل الزوايا والارقام العشرية لذلك عليك بهذا المرجع http://www.website.masmforum.com/tutorials/fptute/index.html
وبالتوفيق ان شاء الله في مشروع التخرج
تم تعديل هذه المشاركة بواسطة Xacker في 28 مايو 2007 في 13:27
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
مساعدة بسيطة, لكن توقفت عند العملية الاخيرة اقرأ التعليق لتعرف السبب
أيضا اريد ان انبهك الى موضوع كي لا يفوتك, الزوايا تتعامل معها بالراديان وليس بالدرجات
عليك ان تقوم بعملية التحويل قبل استخدام اي زاوية بالدرجات او اعطاءها بالدرجات كقيمة نهائية
.data fpoint1 dd 730531.5 fpoint2 dd 280.461 fpoint3 dd 0.9856474 fpoint4 dd 357.528 fpoint5 dd 0.9856003 fpoint6 dd 1.915 fpoint7 dd 0.02 fpoint8 dd 23.439 fpoint9 dd 0.0000004 fpoint10 dd 100.46 fpoint11 dd 0.985647352 .data? D dd ? Y dw ? M dw ? d dw ? L dd ? M dd ? Lambda dd ? Obliq dd ? Alpha dd ? _ST dd ? _Dec dd ? Noon dd ? UT_Noon dd ? Long dd ? LN dd ? Zone dd ? .code start: calc_D proc far ;D =((367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d-730531.5) mov eax,Y mul 367 push eax mov eax,M add eax,9 div 12 push eax pop ebx mov eax,Y add eax,ebx push eax mov eax,7 div 4 pop ebx mul ebx mov ebx,eax pop eax sub eax,ebx push eax mov eax,M div 9 mul 275 pop ebx add eax,ebx add eax,d mov D,eax ; Floating Point Units time fld D ; st(0)=(367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d fsub fpoint1 ; st(0)=(367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d-730531.5 fst D ; D=((367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d-730531.5) ret calc_D endp calc_L proc far ;L = 280.461+0.9856474*D fld D ; st(0)=D fmul fpoint3 ; st(0)=D*0.9856474 fadd fpoint2 ; st(0)=280.461+0.9856474*D fst L ; L=st(0) ret calc_L endp calc_M proc far ;M = 357.528+0.9856003*D fld D ; st(0)=D fmul fpoint5 ; st(0)=D*0.9856003 fadd fpoint4 ; st(0)=357.528+0.9856003*D fst M ; M=st(0) ret calc_M endp calc_Lambda proc far ;Lambda = L +1.915*SIN(M)+0.02*SIN(2*M) fld M ; st(0)=M fsin ; st(0)=SIN(M) fmul fpoint6 ; st(0)=SIN(M)*1.915 fadd L ; st(0)=L +1.915*SIN(M) mov eax,M ; EAX=M mul 2 ; EAX=EAX*2 mov Lambda,eax ; just a temp val fld Lambda ; st(0)=2*M / st(1)=L +1.915*SIN(M) fsin ; st(0)=SIN(2*M) / st(1)=L +1.915*SIN(M) fmul fpoint7 ; st(0)=0.02*SIN(2*M) / st(1)=L +1.915*SIN(M) fadd st,st(1); st(0)=L +1.915*SIN(M)+0.02*SIN(2*M) fst Lambda ; Lambda=L +1.915*SIN(M)+0.02*SIN(2*M) ret calc_Lambda endp calc_Obliquity proc far ;Obliquity = 23.439-0.0000004*D fld D ; st(0)=D fmul fpoint9 ; st(0)=0.0000004*D fld fpoint8 ; st(0)=23.439 / st(1)=0.0000004*D fsub st,st(1); st(0)=23.439-0.0000004*D fst Obliq ; Obliq=23.439-0.0000004*D ret calc_Obliquity endp calc_Alpha proc far ;Alpha =ATAN (COS(Obliquity)*TAN(Lambda)) ;phase1 fld Obliq ; st(0)=Obliq fcos ; st(0)=COS(Obliquity) fld Lambda ; st(0)=Lambda / st(1)=COS(Obliquity) fptan ; st(0)=1.0 / st(1)=TAN(Lambda) / st(2)=COS(Obliquity) fstp st ; st(0)=TAN(Lambda) / st(1)=COS(Obliquity) fmul st,st(1); st(0)=COS(Obliquity)*TAN(Lambda) fld1 ; st(0)=1.0 / st(1)=COS(Obliquity)*TAN(Lambda) fpatan ; st(0)=ATAN(COS(Obliquity)*TAN(Lambda)) fst ; Alpha=ATAN(COS(Obliquity)*TAN(Lambda)) ;Alpha = Alpha - (360*INT(Alpha /360)) ;phase2 ; ??? ;Alpha = Alpha + 90*(TRUNC(Alpha/90)-TRUNC(Alpha/90)) ;phase3 ; ??? ret calc_Alpha endp calc_ST proc far ;ST =100.46 + 0.985647352*D fld D ; st(0)=D fmul fpoint11; st(0)=0.985647352*D fadd fpoint10; st(0)=100.46 + 0.985647352*D fst _ST ; _ST=100.46 + 0.985647352*D ret calc_ST endp calc_Dec proc far ;Dec =ASIN(SIN(Obliquity)*SIN(Lambda)) fld Lambda ; st(0)=Lambda fsin ; st(0)=SIN(Lambda) fld Obliq ; st(0)=Obliq / st(1)=SIN(Lambda) fsin ; st(0)=SIN(Obliquity) / st(1)=SIN(Lambda) fmul st,st(1); st(0)=SIN(Obliquity)*SIN(Lambda) fld1 ; st(0)=1.0 / st(1)=SIN(Obliquity)*SIN(Lambda) fdiv st,st(1); st(0)=ASIN(SIN(Obliquity)*SIN(Lambda)) fst _Dec ; _Dec=ASIN(SIN(Obliquity)*SIN(Lambda)) ret calc_Dec endp calc_Noon proc far ;Noon = Alpha - ST mov eax,Alpha sub ST mov Noon,eax ret calc_Noon endp calc_UT_Noon proc far ;UT Noon = Noon - Long mov eax,Noon sub Long mov UT_Noon,eax ret calc_UT_Noon endp calc_LN proc far ;Local Noon = UT Noon /15 + Zone mov eax,UT_Noon div 15 add eax,Zone mov LN,eax ret calc_LN endp end start
لكن هلاّ توضح لي التالي:
اقتباسمع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360° بالمعادلة(Alpha = Alpha - (360*INT(Alpha /360
ثم نعدل المطلع المستقيم
Alpha = Alpha + 90 * ( TRUNC ( Alpha / 90 ) -TRUNC(Alpha / 90))
لأني ارى المعادلتين نتيجتهما صفر!
تم تعديل هذه المشاركة بواسطة Xacker في 28 مايو 2007 في 15:30
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
بغية المنفعة لكل اعضاء المنتدى سؤقدم لكم حساب بسيط
ومن خلاله يمكن تدارك اخطائي بحول الله
وسأحسب هنا مواقيت الصلاة وفق الخطوات مستخدماً في ذلك آلة حاسبة عادية
والأحداثيات Booknet للدوحة هي
الطول 51 درجة 36 دقيقة ،نقوم بتحويل هذا إلى رقم عشري بقسمة الدقائق على 60 فيصير الطول هو 51.6 درجة
العرض هو 25 درجة و 15 دقيقة ، وبالكسر العشري يصير 25.25 درجة
والتاريخ هو 3 يونيو لعام 2005
الخطوة الأولى
نحسب اليوم اليولياني D من القانون
D =((367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d-730531.5)
حيث أن Y هو السنين ، M هو الشهر ، d هو اليوم
وأنا أعلم أن هذه الصيغة الرياضية قد يستشكل فهمها بعض المبتدئين لذلك سأكتبها بالصورة الجبرية الدقيقة كالتالي
لذلك إذا عوضنا في المعادلة كان الحاصل هو
D = 1979.5
ويمكن تقطيع معادلة حساب اليوم اليولياني إلى بضعة خطوات يسهل التعامل معه كالتالي
ا ) السنة الميلادية × 367
ب ) ( الشهر + 9 ) ÷ 12 احذف الكسر مطلقاً
ج ) ( السنة + ب ) × 7
د ) ج ÷ 4 احذف الكسر من الحاصل
ع ) الشهر × 275 ÷ 9 احذف الكسر من الحاصل
اليوم اليولياني = ا - د + ع + اليوم - 730531.5
نطبق ذلك كالتالي
ا ) 2005 * 367 = 735835
ب ) (9+6 ) / 12 = 1 حذفنا الكسر من الحاصل
ج ) ( 2005 + 1 ) * 7 = 14042
د ) 14042 / 4 = 3510 حذفنا الكسر هنا
ع ) 6 * 275 / 9 = 183 حذفنا الكسر
اليوم اليولياني = 735835 - 3510 + 183 + 3 – 730531.5
اليوم اليولياني = 1979.5 وهو المطلوب
وهناك طريقة أسهل وأسهل بكثير مما ذكرناه سابقاً ، وهو أن تحسب عدد الأيام الماضية من اول يناير لعام 2000 م إلى التاريخ المطلوب والحاصل إطرح منه واحد ونصف
ففي مثالنا السابق التاريخ المطلوب الحساب فيه هو 3 يونيو 2005
نحسب عدد الأيام الماضية كالتالي
عام 2000 يحتوي 366 يوم لأنه كبيسة
عام 2001 يحتوي 365 يوم لأنه بسيطة
عام 2002 يحتوي 365 يوم لأنه بسيطة
عام 2003 يحتوي 365 يوم لأنه بسيطة
عام 2004 يحتوي 366 يوم لأنه كبيسة
ثم نحسب عدد الأيام من أول يناير 2005 إلى 3
</div>يونيو 2005 فنجدها 154 يوماً
إذن مجموع الأيام الماضية من أول 2000 م إلى 3/6/2005 كالتالي
366+365+365+365+366+154 = 1981
نطرح من الحاصل السابق واحد ونصف فيصير 1979.5
إذن اليوم اليولياني هو 1979.5 وهو موافق للسابق
نعم أنا أعلم أنني أطلت في شرح حساب اليوم اليولياني لأن أغلب أخطاء زملائي هواة الفلك يقع فيها دائماً
الخطوة الثانية نحسب طول الشمس الوسطي من المعادلة
L = 280.461+0.9856474*D
L = 280.461 + 0.9856474 * (1979.5)
L = 2231.602683
لا بد أن يكون الحاصل أقل أو يساوي 360 فقط فإن زاد القيمة عن 360 فإنا نحذف مضاعفات الرقم 360 ، وطريقة ذلك أن نقسم القيمة على 360 والحاصل نحذف منه الأعداد الصحيحة ونأخذ الكسر العشري ونضربه في 360 كالتالي
2231.602683 قسمة 360 الحاصل هو 6.198896342
نحذف العدد الصحيح وهو الرقم 6 فيصير
نحذف العدد الصحيح وهو الرقم 6 فيصير 0.198896342 وهذا هو الكسر العشري
ثم نضرب الكسر العشري 0.198896342 في 360 فيصبح 71.602683
إذن
L = 71.602683
الخطوة الثالثة
نحسب حصة الشمس الوسطي M من المعادلة
M = 357.528+0.9856003*D
M= 357.528 + 0.9856003* ( 1979.5 )
M= 2308.523794
نحذف المضاعفات كما سلف الحديث عنه كالتالي
M = 148.5237939
الخطوة الرابعة
نحسب طول الشمس البروجي Lambda من المعادلة
Lambda = L +1.915*SIN(M)+0.02*SIN(2*M) ,
Lambda = 71.602683 +1.915*sin (148.5238)+0.02*sin(2*
148.5238) ,
Lambda = 72.5321
الخطوة الخامسة
نحسب الميل الكلي لدائرة البروج Obliquity من المعادلة
Obliquity = 23.439-0.0000004*D
Obliquity = 23.439 – 0.0000004 * (1979.5 ) ,
Obliquity = 23.4382082
الخطوة السادسة
نحسب المطالع المستقيمة للشمس Alpha من القانون
Alpha =ATAN (COS(Obliquity)*TAN(Lambda)) ,
Atan يعني معكوس ظل الزاوية
Alpha = Atan ( cos (23.4382082) * TAN (72.5321)) ,
Alpha = 71.068948
مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360° وفق الملاحظات التالية
إذا كان طول الشمس البروجي بين صفر و 90 فإن المطالع المستقيمة كما هو
إذا كان الطول البروجي بين 90 – 180 فلابد من إضافة 180 على المطالع
إذا كان الطول البروجي بين 180 _ 360 فلابد من إضافة 360 للمطالع
الخطوة السابعة
نحسب الزمن النجمي بالدرجات st
ST =100.46 + 0.985647352 *D
St = 100.46 + 0.985647352 * (1979.5 )
St = 2051.548933
St = 251.548933
الخطوة الثامنة
نحسب ميل الشمس الزاوي DEC
Dec =ASIN(SIN (Obliquity )*SIN(Lambda)),
ASIN يعني معكوس جيب الزاوية
DEC = ASIN( sin(23.4382082)* sin(72.5321)
DEC = 22.29758
الخطوة التاسعة
نحسب زوال الشمس الوسطي noon
Noon = Alpha – ST
إذا بلغت القيمة بالسالبة فأضف على الحاصل النهائي 360
Noon = 71.068948 - 251.548933
Noon = - 180.479985
نضيف هنا فوق الحاصل 360 لأنه بالسلب
Noon = 179.520015
الخطوة العاشرة
نحسب الزوال العالمي UT Noon
UT Noon = Noon - Long
حيث أن Long هو خط الطول الجغرافي للبلد
UT Noon = 179.520015 – 51.6
UT Noon = 127.920015
الخطوة الحادية عشر
نحسب الزوال المحلي الذي هو وقت الظهر Local noon
Local Noon = UT Noon /15 + Zone
حيث أن Zone هو فرق التوقيت العالمى
Local Noon = 127.920015 /15 + 3
Local
Noon = 11.528001
إذن وقت الظهر بالدوحة هو الساعة 11:31:41
حساب حصص مواقيت ( المغرب والشروق والعشاء والفجر )
نرمز للحصص AR
ويحسب وفق المعادلة
ملاحظة
الرمز alt يرمز إلى ارتفاع أو إنخفاض مركز الشمس عن الأفق
فللمغرب والشروق اجعل alt في المعادلة ( -1 )
وعليه يصير وقت المغرب sun set
Sun set = Local Noon + AR /15
ويصير حساب وقت الشروق sun rise
Sun rise = Local Noon - AR /15
وللعشاء والفجر إجعل alt في المعادلة ( -18 )
وعليه يصير وقت العشاء Esha
Esha = Local Noon + AR /15
ويصير وقت الفجر Fajr
Fajr = Local Noon - AR /15
ولتطبيق الحساب على المغرب والشروق في المعادلة كالتالي
AR = ACOS ( -0.21426126 )
AR = 102.3721907
نطبق ذلك في حساب المغرب والشروق كالتالي
Sun set = Local Noon + AR /15
Sun set = 11:31:41 + 102.3721907 / 15
Sun set = 11:31:41 + 6:49:29
Sun set = 18:21:10
Sun rise = 11:31:41 - 6:49:29
Sun rise = 4:42:12
وإذا طبقنا الحساب في معادلة الحصص AR بعد جعل قيمة alt يساوي -18
نحصل على
AR = 124.241245
Esha = Local Noon + AR /15
<DIV align=left>Esha = 11:31:41
معادلة ar
ar=ACOS ((SIN(-0.8333 )-SIN(Dec)*SIN(Lat))/(COS(Dec)*COS(Lat)))
Fajr = Local Noon - AR /15
Fajr = 11:31:41 - 8:16:58
Fajr = 3:14:43
من خلال التأمل في قانون حساب الحصص AR نجد أن الذي يحدد مقدار هذا الحصص هو ارتفاع أو إنخفاض مركز الشمس عن الأفق alt فبتغيير قيمته تتغير قيمة الحصة
ولحساب وقت العصر يجب تحديد مقدار ارتفاع مركز الشمس Asr alt عن الأفق وفق القانون
,(( Asr Alt =90- ATAN (1+ TAN( Lat - Dec
حيث ان Lat هو عرض البلد
و Dec هو ميل الشمس
وواضح من قانون حساب ارتفاع العصر أنه يعتمد على أخذ الفرق بين الميل وعرض البلد
لذلك لا بد أن تكون قيمة هذا الفارق بالموجب ، وإلا وقع الخلل في حساب وقت العصر
كما يشاهد ذلك في شهري يوليو وأغسطس للبلدان التي يقل عرضها عن الميل الكلي للشمس
أوفي الشتاء للمدن التي تقع أسفل خط الأستواء
لذلك عندما نحسب وقت العصر ببرنامج أكسل أو غيره فإننا نضيف دالة ABS أي دالة القيمة المطلقة التي تحول السالب في آخر القيم إلى موجب كالتالي
, ((( Asr Alt =90- ATAN (1+ TAN(ABS( Lat - Dec
ثم بعد معرفتنا بإرتفاع العصر نطبق الحاصل في قانون الحصص كالآتي
ويصير معرفة العصر Asr Time وفق المعادلة
Asr Time = Local Noon + AR / 15
ففي مثالنا لمدينة الدوحة عرضها 25.25 وميل الشمس 22.297 وبالتالي فإن حاصل طرح الميل من العرض تعطي نتيجة موجبة ، لذلك نطبق قانون حساب ارتفاع العصر مباشرة دون تغيير كالتالي
Asr alt = 90 – Atan (1+ Tan ( Lat – Dec )),
Asr alt = 90 – Atan ( 1 + Tan (25.25 – 22.297),
Asr alt = 43.5596
AR = 50.94430
Asr Time = Local Noon + AR / 15
Asr Time = 11:31:41 + 50.94430 / 15
Asr Time = 11:31:41 + 3:23:46
Asr Time = 14:55:27
اسف على عدم التنظيم
اوبس, لم انتبه الى موضوع الميكروكنترولر
في هذه الحالة انسحب, لا افقه الكثير فيه
لكن من خلال Google وجدت انه يوجد رقاقة جاهزة لا أدري ما امكانية طلبها او استخدامها ضمن المشروع.
http://www.micromegacorp.com/#articles
مع الانتباه الى موضوع:
"<a href='http://www.scienceprog.com/increase-microcontroller-code-efficiency/#a كتب:Don’t use float point arithmeticFloating point arithmetic is a killer of microcontroller code efficiency unless your design includes FPU. Otherwise compiler uses software subroutines to simulate floating point arithmetic’s. There are many techniques which let you avoid using floating point operations like byte shift instead divide and so on.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
هذا الموضوع مغلق.