PDA

View Full Version : معادل کد سی شارپ این کد vb6 برای محاسبه اوقات شرعی



negar.rafie
پنج شنبه 05 بهمن 1391, 14:42 عصر
Private Type Behzad
XX As Double
YY As Double
End Type

دوستان اول بگید این کد چیکار میکنه بعد معادل کد سی شارپ را لطف کنید بزارید

daneshjo90
پنج شنبه 05 بهمن 1391, 15:10 عصر
کد کامل رو بزارید بهتر میشه به جواب رسید

من که سر در نیاوردم چی به چیه
ولی 2 تا متغیر از نوع دابل تعریف کرده به نام های XX و YY که تو خط اول private type behzad شروع میشه و در آخر End type تموم میکنه فک کنم behzad رو

تا جایی که من میدونم اینطوری میشه

ولی سعی کن کد کامل رو قرار بدی

موفق باشی

plus
پنج شنبه 05 بهمن 1391, 16:46 عصر
این کد خاصی نیست فقط یک struct تعریف میکنه:

private struct Behzad
{
double XX;
double YY;
}

negar.rafie
پنج شنبه 05 بهمن 1391, 16: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));
}

negar.rafie
پنج شنبه 05 بهمن 1391, 20:36 عصر
دوستان لطف کنید کمک کنید

negar.rafie
جمعه 06 بهمن 1391, 08:38 صبح
دوستان فکر کنم توابع مربوط به محاسبه سینوس و کوسینوس اضافی هستند و میتوانیم و توابع کلاس math استفاده کنیم درسته؟