negar.rafie
پنج شنبه 05 بهمن 1391, 17:56 عصر
دوستان من کد vb6 را قرار میدم همراه با کد تبدیل شده سی شارپ اگر کسی حوصله داره یه نگاهی بندازه بگه کجاش را اشتباه تبدیل کردم و مشکل داره
کد vb6
Dim lgs As Double
Dim lats As Double
Private Type Behzad
XX As Double
YY As Double
End Type
Const PI As Double = 3.14159265358979
Public Sub ProcessALL(m As Double, d As Double, lg As Double, lat As Double, AzanSOb As String, Toloe As String, AzanZohr As String, Ghoroob As String, Maghreb As String)
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
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)
AzanSOb = 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)
Toloe = hms(t2)
'
' zr=Zohr
'
ep = sun(m, d, 12, lg)
ep = sun(m, d, ep.XX, lg)
zr = ep.XX
AzanZohr = 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)
Ghoroob = 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)
Maghreb = hms(t4)
End Sub
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) * Sqr((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
hms = s
End Function
Private Function sind(X)
sind = Sin(PI / 180 * X)
End Function
Private Function cosd(X)
cosd = Cos(PI / 180 * X)
End Function
Private Function tand(X)
tand = Tan(PI / 180 * X)
End Function
Private Function atand(X)
atand = Atn(X) * 180 / PI
End Function
Private Function asind(X As Double)
asind = ASin(X) * 180 / PI
End Function
Private Function acosd(X As Double)
acosd = 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 = Atn(X / Sqr(-X * X + 1.01))
End Function
Private Function ACos(X As Double) As Double
ACos = Atn(-X / Sqr(-X * X + 1.01)) + 2 * Atn(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 = Atn(Y / X)
End If
Else
If Y = 0 Then
ATan2 = PI
Else
ATan2 = (PI - Atn(Abs(Y) / Abs(X))) * Sgn(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
کد سی شارپ
public double lgs;//طول
public double lats;//عرض
const double PI = 3.14159265358979;
private struct Behzad
{
double XX;
double YY;
}
public void ProcessALL(double m, double d, double lg, double lat, string AzanSOb, string Toloe, string AzanZohr, string Ghoroob, string Maghreb)
{
Behzad ep = default(Behzad);
double zr = 0;
double delta = 0;
double ha = 0;
double t1 = 0;
double t2 = 0;
double t3 = 0;
double t4 = 0;
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);
AzanSOb = 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);
Toloe = hms(t2);
//
// zr=Zohr
//
ep = sun(m, d, 12, lg);
ep = sun(m, d, ep.XX, lg);
zr = ep.XX;
AzanZohr = 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);
Ghoroob = 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);
Maghreb = hms(t4);
}
public void coord(long citiIndex, double X, double Y)
{
if (citiIndex == 0)
{
X = 0;
Y = 0;
}
else
{
X = lgs ;
Y = lats ;
}
}
private Behzad sun(double m, double d, double h, double lg)
{
Behzad functionReturnValue = default(Behzad);
double mm = 0;
double l = 0;
double lst = 0;
double e = 0;
double omega = 0;
double ep = 0;
double ed = 0;
double u = 0;
double v = 0;
double theta = 0;
double delta = 0;
double alpha = 0;
double ha = 0;
double zr = 0;
long i = 0;
if (m < 7)
{
d = 31 * (m - 1) + d + h / 24;
}
else
{
d = 6 + 30 * (m - 1) + d + h / 24;
}
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; i <= 4; i++)
{
u = u - (u - ed * sind(u) - mm) / (1 - e * cosd(u));
}
v = 2 * atand(tand(u / 2) * Sqr((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)
alpha = alpha - 360;
ha = lst - alpha / 15;
zr = rRound(h - ha, 24);
functionReturnValue.XX = zr;
functionReturnValue.YY = delta;
return functionReturnValue;
}
private double loc2hor(double z, double d, double p)
{
return acosd((cosd(z) - sind(d) * sind(p)) / cosd(d) / cosd(p)) / 15;
}
private double rRound(double X, double a)
{
double tmp;
tmp = mod2(X, a);
if (tmp < 0) tmp = tmp + a;
rRound = tmp;
}
private string hms(double X)
{
double h;
double mp;
double m;
double ss;
string s;
X = Floor(3600 * X);
h = Floor(X / 3600);
mp = X - 3600 * h;
m = Floor(mp / 60);
ss = Floor(mp - 60 * m);
if (h < 10) s = "0"; else s = "";
s = s + h + ":";
if (m < 10) s = s + "0";
s = s + m + ":";
if (ss < 10) s = s + "0";
s = s + ss;
hms = s;
}
private void sind(double X)
{
sind = Sin(PI / 180 * X);
}
private void cosd(double X)
{
cosd = Cos(PI / 180 * X);
}
private void tand(double X)
{
tand = Tan(PI / 180 * X);
}
private void atand(double X)
{
atand = Atn(X) * 180 / PI;
}
private void asind(double X)
{
asind = ASin(X) * 180 / PI;
}
private void acosd(double X)
{
acosd = ACos(X) * 180 / PI;
}
private long Floor(double X)
{
Floor = Int(X);
}
private double ASin(double X)
{
ASin = Atn(X / Sqr(-X * X + 1.01));
}
private double ACos(double X)
{
return Atn(-X / Sqr(-X * X + 1.01)) + 2 * Atn(1);
}
private double ATan2(double X, double Y)
{
// ERROR: Not supported in C#: OnErrorStatement
if (X == 0)
{
if (Y == 0)
{
ATan2 = 1 / 0;
}
else if (Y > 0)
{
ATan2 = PI / 2;
}
else
{
ATan2 = -PI / 2;
}
}
else if (X > 0)
{
if (Y == 0)
{
ATan2 = 0;
}
else
{
ATan2 = Atn(Y / X);
}
}
else
{
if (Y == 0)
{
ATan2 = PI;
}
else
{
ATan2 = (PI - Atn(Abs(Y) / Abs(X))) * Sgn(Y);
}
}
}
private double mod2(double a, double b)
{
return a - (b * Int(a / b));
}
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.