السلام عليكم و رحمة الله و بركاته...،
لقد صممت ملف بالسي شارب و استخدمت فيه المعادلات السابق ذكرها و لقد عملت علي اكمل وجه
هذا هو الكود لعل البعض يستفيدون منه.
using System;
using System.Collections.Generic;
using System.Text;
namespace MyClock
{
class CalcPrayerTimes
{
double Local_Noon;
double Asr_Time;
double Esha_Time;
double Fajr_Time;
double Sun_Set;
double Sun_Rise;
public CalcPrayerTimes(int Year, int Month, int Day,double Long,double Lat, double Zone)
{
double D = (367 * Year) - ((Year + (int)((Month + 9) / 12)) * 7 / 4) + (((int)(275 * Month / 9)) + Day - 730531.5);
double L = (280.461 + 0.9856474 * D)%360;
L = LessMore360(L);
double M = (357.528 + 0.9856003 * D)%360;
M = LessMore360(M);
double Lambda = L + 1.915 * Math.Sin(ToRadian(M)) + 0.02 * Math.Sin(ToRadian(2 * M));
Lambda = LessMore360(Lambda);
double Obliquity = 23.439 - 0.0000004 * D;
double Alpha = ToDegree(Math.Atan((Math.Cos(ToRadian(Obliquity)) * Math.Tan(ToRadian(Lambda)))));//////
Alpha = LessMore360(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)%360;
double Dec = ToDegree(Math.Asin(Math.Sin(ToRadian(Obliquity)) * Math.Sin(ToRadian(Lambda))));////////
double Durinal_Arc = ToDegree(Math.Acos((Math.Sin(ToRadian(-0.8333)) - Math.Sin(ToRadian(Dec)) * Math.Sin(ToRadian(Lat))) / (Math.Cos(ToRadian(Dec)) * Math.Cos(ToRadian(Lat)))));
double Noon = Alpha - ST;
Noon = LessMore360(Noon);
double UT_Noon = Noon - Long;
Local_Noon = UT_Noon /15 + Zone;
double Asr_Alt = ToDegree(Math.Atan(1 + Math.Tan(ToRadian(Lat - Dec))));
double Asr_Arc = ToDegree(Math.Acos((Math.Sin(ToRadian(90 - Asr_Alt)) - Math.Sin(ToRadian(Dec)) * Math.Sin(ToRadian(Lat))) / (Math.Cos(ToRadian(Dec)) * Math.Cos(ToRadian(Lat)))));
Asr_Arc = Asr_Arc / 15;
Asr_Time = Local_Noon + Asr_Arc;
Sun_Rise = Local_Noon - (Durinal_Arc / 15);
Sun_Set = Local_Noon + (Durinal_Arc /15);
double Esha_Arc = ToDegree(Math.Acos((Math.Sin(ToRadian(-18)) - Math.Sin(ToRadian(Dec)) * Math.Sin(ToRadian(Lat))) / (Math.Cos(ToRadian(Dec)) * Math.Cos(ToRadian(Lat)))));
Esha_Time = Local_Noon +( Esha_Arc /15);
double Fajr_Arc = ToDegree(Math.Acos((Math.Sin(ToRadian(-18)) - Math.Sin(ToRadian(Dec)) * Math.Sin(ToRadian(Lat))) / (Math.Cos(ToRadian(Dec)) * Math.Cos(ToRadian(Lat)))));
Fajr_Time = Local_Noon - (Fajr_Arc /15);
}
public double ToRadian(double Value)
{
return (Value * Math.PI / 180);
}
public double ToDegree(double Value)
{
return (Value * 180 / Math.PI );
}
public double LessMore360(double Value)
{
if (Value <= 0 || Value > 360)
{ return (Value + 360); }
else
return Value;
}
public int LocalNoonHour
{
get
{
return ((int)(Local_Noon));
}
}
public int LocalNoonMin
{
get
{
return (int)(((Local_Noon) - (int)Local_Noon) * 60);
}
}
public int AsrHour
{
get
{
return ((int)(Asr_Time));
}
}
public int AsrMin
{
get
{
return (int)(((Asr_Time) - (int)(Asr_Time)) * 60);
}
}
public int SunRiseHour
{
get
{
return ((int)(Sun_Rise));
}
}
public int SunRiseMinr
{
get
{
return (int)(((Sun_Rise) - (int)(Sun_Rise)) * 60);
}
}
public int SunSetHour
{
get
{
return ((int)(Sun_Set));
}
}
public int SunSetMin
{
get
{
return (int)(((Sun_Set) - (int)(Sun_Set)) * 60);
}
}
public int FajrHour
{
get
{
return ((int)(Fajr_Time));
}
}
public int FajrMin
{
get
{
return (int)(((Fajr_Time) - (int)(Fajr_Time)) * 60);
}
}
public int EshaHour
{
get
{
return ((int)(Esha_Time));
}
}
public int EshaMin
{
get
{
return (int)(((Esha_Time) - (int)(Esha_Time)) * 60);
}
}
}
}[/
font]