Planetary Position (ග්රහ පිහිටීම)
කෙප්ලර් නියම
1) පලමු නියමය -
සෑම ග්රහ ලෝකයක්ම සූර්යයා එක් නාභියක් වූ ඉලිප්සාකාර පථයක ගමන් කරයි.
2)දෙවන නියමය
සූර්යයා කෙරෙන් ග්රහයකු කරා අඳින ලද දෛශික අරය සෑම සමාන කාල ප්රාන්තරයකදීම සමාන ක්ෂෙත්රඵල ගෙවයි.
3) තුන්වන නියමය
සෑම ග්රහයකුගේම සූර්යයා වටා පරිභ්රමණ කාලයේ වර්ගය සූර්යයා හා එම ග්රහ ලෝකය අතර මධ්ය දුරෙහි (semi-major axis )( ග්රහයා ඉලිප්සයේ තිරස් අක්ෂය කපන ස්ථානයේ සිටින විට නාභි දෙකෙන් ආසන්නම නාභියට ඇති දුර (සූර්යයා පිහිටි නාභිය මෙහිදී සැලකේ.)) ඝනයට අනුලෝමව සමානුපාතිකවේ.
P = ග්රහයාගේ පරිභ්රමණ කාලය
a = සූර්යයා හා ග්රහයා අතර මධ්ය දුර = semi-major axis
ජ්යොතිෂයේදී ග්රහ පිහිටීම සලකා බැලෙන්නේ පෘථිවියට සාපේක්ෂ අයුරිනි.මෙහිදී පෘථිවියේ සිට ග්රහයාට ඇති දුර හා ත්රිමාණ තත්ත්වයන් නොසලකා හරින අතර පෘථිවිය හා ග්රහයා අතර කෝණික විස්ථාපනය අනුව ග්රහයාගේ පිහිටීම සලකුනු කෙරේ.සත්ය ලෙසම චන්ද්රයා හැරුණු විට සූර්යයා ඇතුළු ග්රහ වස්තු පෘථිවිය වටා ගමන් නොකලත් සාපේක්ෂ ගණිත විද්යා නියම සලකා බලා ග්රහ වස්තුවේ පෘථිවියට සාපේක්ෂ කෝණික විස්ථාපනය හෙවත් ග්රහස්ඵුථය ගණනය කෙරේ.
ද්විමාන කාටිසියානු ඛන්ඩාංක පද්ධතිය (X,Y) (Cartesian coordinates system)
ද්විමාන ධ්රැවක ඛන්ඩාංක පද්ධතිය (r, θ ) (Polar coordinate system)
Converting between polar and Cartesian coordinates
θ = arcTan(y/x)
කෙප්ලර්ගේ පලමු නියමයෙන් එලඹෙන සමීකරන පද්ධතිය
a = semi-major axis (රූපයේ දැක්වෙන පරිදි ග්රහයා ඉලිප්සයේ තිරස් අක්ෂය කපන ස්ථානයේ සිටින විට නාභි දෙකෙන් ආසන්නම නාභියට ඇති දුර (සූර්යයා පිහිටි නාභිය මෙහිදී සැලකේ.))
b = semi-minor axis (රූපයේ දැක්වෙන පරිදි ඉලිප්සයේ මධ්ය කේන්ද්රය හරහා ඇදි සිරස් අක්ෂය ඉලිප්සය කපන ස්ථානයේ ග්රහයා පිහිටි විට සූර්යයා හා ග්රහයා අතර දුර)
p = semi-latus rectum ( රූපයේ දැක්වෙන පරිදිඉලිප්සයේ නාභිය (සූර්යයා) හරහා ඇදි සිරස් අක්ෂය ඉලිප්සය කපන තැන්හි ග්රහයා පිහිටි විට සූර්යයා හා ග්රහයා අතර දුර)
ε = eccentricity යනු පරාමිතියකි.
වෘත්තයක් සදහා ε = 0
ඉලිප්සය 0< ε<1
පරාවලය ε = 1
C program for compute "Geocentric Longitude" of sun and mercury
#include<stdio.h>
#include<conio.h>
#include<math.h>
# define TRUE 1
extern double sqrt(), sin(), cos(), tan(), atan(), atan2(), fabs(), fmod();
double ps,pt,z1,z2,b6,s1,lat,longt,aya,obliq,sidtime,h6;
int ret = 0, page =1, line, r3[13], s3[13], varga[13][7];
double plnt[26];
main()
{
long int d,m,y,j,h,mt,i,jd() ;
int latdeg, latmt, longdeg, longmt;
double fract(), planet() ;
ps = 0.0;
pt = 0.0;
z1 = 3.14159265359;
z2 = z1/180;
s1 = 99.99826;
printf("\n\n\n\nEnter Your Birth Day (Day.Month.Year) Ex:- 1979/03/16 =16.3.1979 \n ");
scanf("%ld.%ld.%ld", &d, &m, &y);
printf("\n\n\n\n\nEnter Birth Time (h.mt) (24 hour) Ex:- 10:31AM=10.31 , 10.31PM=22.31 \n ");
scanf("%ld.%ld", &h, &mt);
j = jd(d,m,y);
h6 = ((double)h + (double)mt / 60 - 17.5) / 24;
b6 = (j - 694025 + h6) /36525;
j = (j+4)%7;
sun();
mer();
ret = 1;
b6 += 1.0/24/36525;
sun();
mer();
b6 -= 1.0/24/36525;
}
long int jd(d,m,y)
long int d,m,y;
{
long int a,j,l;
float b;
if (m<3) {
m += 12;
y--;
}
a = y/100;
b = 30.6 * (float)(m+1);
l = b;
j = 365 * y + y/4 + l + 2 - a + a/4 +d;
return(j);
}
double planet(pg,ph,pp,pe,pq,pa,pno)
double pg,ph,pp,pe,pq,pa;
int pno;
{
double pm,pb,pf,pc,pd,pr,e1,e2,e3,e4,v1,pv,pj,pk,pl,px,py;
pm = pg - ph;
if (pm < 0)
pm += 360.0;
pb = pm * z2;
pf = pb + pe * sin(pb);
do {
pc = pf - pe * sin(pf) - pb;
pd = 1 - pe * cos(pf);
pf = pf - pc/pd;
} while (fabs(pc/pd) > 0.01);
pr = pa * (1 - pe * cos(pf));
e1 = atan(pe/sqrt(1-pe*pe));
e2 = z1/4 - e1/2;
e3 =tan(e2);
e4 = tan(pf/2);
v1 = atan(e4/e3);
if (v1 < 0.0)
v1 += z1;
pv = 2 * v1;
pc = ph * z2;
pd = pp * z2;
pb = pq * z2;
pj = pv + pc;
pk = pj - pd;
pl = 1.0 - cos(pb);
px = ( cos(pj) + sin(pk)*sin(pd)*pl) * pr;
py = ( sin(pj) - sin(pk)*cos(pd)*pl) * pr;
if (pno == 1) {
ps = px;
pt = py;
}
pc = ps + px;
pd = pt + py;
pm = atan(pd/pc)/z2;
if (pc < 0.0)
pm += 180.0;
else if (pd < 0.0)
pm += 360.0;
return pm;
}
double fract(x)
double x;
{
long int i;
double y;
i = x;
y = x - i;
return y;
}
sun()
{
double g0,h0,p0,e0,q0,a0;
int pno;
g0 = 360 * fract(0.71455 + 99.99826 * b6);
h0 = 258.76 + 0.323 * b6;
p0 = 0.0;
e0 = 0.016751 - .000042 * b6;
q0 = 0.0;
a0 = 1.0;
pno = 1;
if(ret == 0)
plnt[pno]=planet(g0,h0,p0,e0,q0,a0,pno);
else
plnt[pno+13]=planet(g0,h0,p0,e0,q0,a0,pno);
return 0;
}
mer()
{
double g0,h0,p0,e0,q0,a0;
int pno;
g0 = 360 * fract(0.43255 + 415.20187 * b6);
h0 = 53.44 + 0.159 * b6;
p0 = 24.69 - 0.211 * b6;
e0 = 0.205614 + .00002 * b6;
q0 = 7.00288 + 0.001861 * b6;
a0 = 0.3871;
pno = 2;
if (ret == 0)
plnt[pno] = planet(g0,h0,p0,e0,q0,a0,pno);
else
plnt[pno+13] = planet(g0,h0,p0,e0,q0,a0,pno);
return 0;
}
මෙම වැඩසටහනේ කම්පයිල් අවුට්පුට් රනින් වින්ඩෝව භාගත කර ගැනීමට මෙතනින් යන්න.
වෘත්තයක් සදහා ε = 0
ඉලිප්සය 0< ε<1
පරාවලය ε = 1
බහුවලය ε > 1
ඉලිප්සයේ වර්ගඵලය A = πab
කෙප්ලර්ගේ දෙවන නියමය ගණිතමය අයුරින්
කෙප්ලර්ගේ තුන්වන නියමය ගණිතමය අයුරින්
ඉහත තුන්වන නියමය දැක්වීමේදී එහි ගණිත ස්වරූපයෙන්ම දක්වා ඇත.
ඉහත දැක්වූ කෙප්ලර් නියම පද්ධතිය අනුව ග්රහයෙකුගේ චලිතය ඔස්සේ අර්ථ දැක්වෙන පහත දැක්වෙන පරාමිති හය මූලික කොට ගෙන යම් මොහොතකදී ග්රහයකුගේ සූර්යයාට සාපේක්ෂ(සූර්යය කේන්ද්රීය) පිහිටීමත් ඒ පිහිටීම උපයෝගී කරගෙන ඒ මොහොතේ ග්රහයාගේ පෘථිවියට සාපේක්ෂ(පෘථිවි කේන්ද්රීය) පිහිටීම ගණනය කරයි.පරිගණක ජ්යොතිෂ මෘදුකාංගවල ග්රහස්ඵුථ ගනනයේ මූලික සිද්ධාන්තය මෙයයි.චන්ද්රයාගේ ගමන මීට වෙනස් නිසා චන්ද්ර ස්ඵුථය සෙවීමේ සිද්ධාන්තය මීට තරමක් වෙනස්ය.ලග්න ස්ඵුථය සෙවීමද වෙනස් ක්රමයකිනි. ඒ පිළිබදව පසුව සලකා බලමු
ග්රහස්ඵුථය ගනනයේදී වැඩසටහනට මූලිකව ඇතුල් කරන ග්රහයන් සම්බන්ධ මූලික පරාමිති හය
4) Eccentricity
5) Inclination
6) Mean Distance
මෙම පරාමිති හය ඔස්සේ ලැබෙන අගයන් හරහා වැඩසටහන ඉදිරියට ක්රියාත්මක වෙමින් ග්රහයාගේ ග්රහස්ඵුථය දක්වා අනුක්රමයෙන් ගනනය කෙර්.මෙම ක්රියාවලියේදී අතරමැදිව ගනනය කෙරෙන පරාමිති හා ඒවා ගණිත සමීකරණ තුල යෙදෙන ආකාරය සරල අයුරින් පහත දක්වා ඇත.
mean anomaly. = M හි අගය
M = Mean Longitude - Longitude of Perihelian
M = E - ε.sin(E)
සමීකරණ දෙක මගින් දැක්වේ මෙහි
E = M + ε.sin(E)
E සදහා පලමු නිමානය ලෙස
M + ε.sin(M) අගය තෝරා ගත හැක.
f(E) = E - M - ε.sin(E) ලෙස f(E) ශ්රිතය තෝරා ගත් විට නිව්ටන් සන්නිකර්ෂණ ක්රමය අනුව
f(E) = 0 හි මූල සන්නිකර්ෂණ ක්රමෙයෙන් E සදහා ආසන්න අගය ලබා ගත හැක. පරිගණක වැඩ සටහන තුල නිව්ටන් සන්නිකර්ෂණ ක්රමය ඉතා සියුම් අවස්ථාව දක්වා මෙහෙයවිය හැකි නිසා මෙම ක්රමය වඩාත් සුදුසුය. මෙම ලිපිය අවසානයේ දක්වා ඇති ග්රහස්ඵුථය ගනනය කෙරෙන C වැඩසටහන තුල මෙම නිව්ටන් සන්නිකර්ෂණ ක්රමය ඇතුලත් කොට ඇත.
කෙප්ලර් නියම වල අර්ථ දැක්වෙන පරිදි ග්රහයාගේ සූර්ය කේන්ද්රීය ධ්රැවක ඛන්ඩාංක පද්ධතියෙන් විස්තර වන දෛශික අරය
pr = pa. (1 - ε.cos(E) ) මගින් දැක්වේ. මෙහි
pa = Mean Distance
E = නිව්ටන් සන්නිකර්ෂන ක්රමයෙන් E සදහා ලැබුනු අවසන් සන්නිකර්ෂන අගය
true anomaly.= V අගය
සමීකරණයෙන් ලැබේ
E = නිව්ටන් සන්නිකර්ෂන ක්රමයෙන් E සදහා ලැබුනු අවසන් සන්නිකර්ෂන අගය
V = arccos { (cosE -e)/(1 -e.cosE)}
C කම්පයිලරය තුල ප්රතිලෝම කොස් ත්රිකෝණමිතික ශ්රිතය ක්රියාත්මක පහසුකම නැති නිසා ගනනය කිරීමට මා විසින් වැඩසටහන තුල භාවිතා කොට ඇත්තේ වෙනත් ත්රිකෝණමිතික සර්වසාම්යයකි.
X, Y ඛන්ඩාංක ගනනය කිරීම
X = (pr).{ cos(v+h) + [sin(v+h-p).sin(p).(1-cos(q))] }
Y = (pr).{ sin(v+h) - [sin(v+h-p).cos(p).(1-cos(q))] }
සූර්ය කේන්ද්රීය ධ්රැවක ඛන්ඩාංක පද්ධතියෙන් දැක්වෙන Heliocentric Longitude (θ) අගය
θ = arcTan( Y/X ) සමීකරණයෙන් ලැබේ.
ජ්යොතිෂයේදී භාවිතා කෙරෙන්නේ පෘථිවි කේන්ද්රීය අගයයි. පෘථිවි කේන්ද්රීය අනුරූප ඛන්ඩාංක අගයන්
EX = X + SX
EY = Y + SY
....................................................................................................................................................................X = (pr).{ cos(v+h) + [sin(v+h-p).sin(p).(1-cos(q))] }
Y = (pr).{ sin(v+h) - [sin(v+h-p).cos(p).(1-cos(q))] }
සූර්ය කේන්ද්රීය ධ්රැවක ඛන්ඩාංක පද්ධතියෙන් දැක්වෙන Heliocentric Longitude (θ) අගය
θ = arcTan( Y/X ) සමීකරණයෙන් ලැබේ.
ජ්යොතිෂයේදී භාවිතා කෙරෙන්නේ පෘථිවි කේන්ද්රීය අගයයි. පෘථිවි කේන්ද්රීය අනුරූප ඛන්ඩාංක අගයන්
EX = X + SX
EY = Y + SY
මගින් දැක්වේ මෙහි SX හා SYයනු සූර්යයාට සාපේක්ෂව පෘථිවියේ X,Y ඛන්ඩාංක අගයන්ය.
ඒ අනුව පෘථිවියට සාපේක්ෂව ග්රහයාගේ කෝණික විස්ථාපනය (Geometric Longitude) θe අගය
θe = arcTan( EY/EX ) මගින් දැක්වේ.
මෙම සිද්ධාන්ත පද්ධතිය උපයෝගී කරගෙන යම්කිසි වේලාවක ග්රහයකුගේ පෘථිවියට සාපේක්ෂ කෝණික විස්ථාපනය හෙවත් ග්රහයාගේ ග්රහස්ඵුඨය ගනනය කිරීමට මා විසින් ගොඩනගන ලද වැඩසටහනක් පහත දක්වා ඇත.මෙම වැඩසටහනේ කම්පයිල් අවුට්පුට් රනින් වින්ඩෝව භාගත කර ගැනීමට පහසුකමද සලසා ඇත.මෙහිදී පරිගනකයට ඇතුල් කෙරෙන වේලාවකට අදාළව කොළඹ නගරයට සාපේක්ෂව ග්රහයාගේ ස්ඵුඨය ගනනය කෙරේ.
මෙහි පළමු ලිපියෙන් ජූලියන් දින අංකයට අදාළ ගණනය ඉදිරිපත් කර ඇත.මෙම ලිපිය සමඟ දක්වා ඇති වැඩසටහනෙන් අදාළ වේලාවට අනුරූප ජූලියන් අගය ඇසුරින් ගනනය වන b6 (මෙය ගනනය කෙරෙන හැටි C වැඩසටහන තුල දක්වා ඇත. b6 = (j - 694025 + h6) /36525
මෙහි h6 = (h + mt / 60 - 17.5) / 24
b6 පරාමිතිය ඔස්සේ වැඩසටහන තුල ග්රහයාගේ විශේෂ පරාමිති හය සදහා අගයන් ලබාදෙමින් අවසන් අගය ලබාදේ.බුද්ධිමය දේපල ආරක්ෂා කිරීම සදහා රවි හා බුධ ග්රහයන්ට අනුරුප කෝණික විස්ථාපන අගයන් ලබා ගැනීම පමනක් වැඩසටහනට එකතු කර ඇත.පෘථිවියේ ඕනෑම තැනකට අදාළව ගනනය කිරීමේ සූත්රයද ඉවත් කර ඇත. * කම්පයිලරය තුල ත්රිකෝණමිතික ශ්රිත තුල ආදේශ වන කෝණ අගයන් රේඩියන් වලට හරවා ඇති බවද විශේඳයෙන් මතක් කල යුතුය.
ප.ලි.
රවි(sun) සදහා
Mean longitude =g = 360x { (0.71455 + (99.99826)xb6 ) හි දශම අගය}
Longitude of Perihelion = h0 =258.76 + (0.323)xb6
Longitude of Ascending Node = p0 = 0.0
Eccentricity = e0 = 0.016751 - (0.000042)xb6
Inclination = q0 = 0.0
Mean Distance = a0 = 1.0
බුධගේ පරාමිති හයට අදාල අංකනය මෙලෙසම වන අතර ඒවාට අගයන් දී ඇති අයුරු වැඩසටහන තුල දක්වා ඇත.
(පින්තුර උපුටා ගැනීම - විකිපීඩියා).
ප.ලි.
රවි(sun) සදහා
Mean longitude =g = 360x { (0.71455 + (99.99826)xb6 ) හි දශම අගය}
Longitude of Perihelion = h0 =258.76 + (0.323)xb6
Longitude of Ascending Node = p0 = 0.0
Eccentricity = e0 = 0.016751 - (0.000042)xb6
Inclination = q0 = 0.0
Mean Distance = a0 = 1.0
බුධගේ පරාමිති හයට අදාල අංකනය මෙලෙසම වන අතර ඒවාට අගයන් දී ඇති අයුරු වැඩසටහන තුල දක්වා ඇත.
(පින්තුර උපුටා ගැනීම - විකිපීඩියා).
වැඩසටහන තුල ක්රියාවලිය අවබෝධ කර ගැනීමට සරල ඇල්ගොරිදමයක් පහත දක්වා ඇත.
1) get value day =d ,month =m , year =y and h = hours , mt =minutes (24 hours time format )
2) compute j and b6;
3) calculate 6 parameters using b6 value
4) calculate True Anomaly.= V
5) calculate X and Y
6) calculate EX and EY
7) calculate θe
C program for compute "Geocentric Longitude" of sun and mercury
#include<stdio.h>
#include<conio.h>
#include<math.h>
# define TRUE 1
extern double sqrt(), sin(), cos(), tan(), atan(), atan2(), fabs(), fmod();
double ps,pt,z1,z2,b6,s1,lat,longt,aya,obliq,sidtime,h6;
int ret = 0, page =1, line, r3[13], s3[13], varga[13][7];
double plnt[26];
main()
{
long int d,m,y,j,h,mt,i,jd() ;
int latdeg, latmt, longdeg, longmt;
double fract(), planet() ;
ps = 0.0;
pt = 0.0;
z1 = 3.14159265359;
z2 = z1/180;
s1 = 99.99826;
printf("\n\n\n\nEnter Your Birth Day (Day.Month.Year) Ex:- 1979/03/16 =16.3.1979 \n ");
scanf("%ld.%ld.%ld", &d, &m, &y);
printf("\n\n\n\n\nEnter Birth Time (h.mt) (24 hour) Ex:- 10:31AM=10.31 , 10.31PM=22.31 \n ");
scanf("%ld.%ld", &h, &mt);
j = jd(d,m,y);
h6 = ((double)h + (double)mt / 60 - 17.5) / 24;
b6 = (j - 694025 + h6) /36525;
j = (j+4)%7;
sun();
mer();
ret = 1;
b6 += 1.0/24/36525;
sun();
mer();
b6 -= 1.0/24/36525;
}
long int jd(d,m,y)
long int d,m,y;
{
long int a,j,l;
float b;
if (m<3) {
m += 12;
y--;
}
a = y/100;
b = 30.6 * (float)(m+1);
l = b;
j = 365 * y + y/4 + l + 2 - a + a/4 +d;
return(j);
}
double planet(pg,ph,pp,pe,pq,pa,pno)
double pg,ph,pp,pe,pq,pa;
int pno;
{
double pm,pb,pf,pc,pd,pr,e1,e2,e3,e4,v1,pv,pj,pk,pl,px,py;
pm = pg - ph;
if (pm < 0)
pm += 360.0;
pb = pm * z2;
pf = pb + pe * sin(pb);
do {
pc = pf - pe * sin(pf) - pb;
pd = 1 - pe * cos(pf);
pf = pf - pc/pd;
} while (fabs(pc/pd) > 0.01);
pr = pa * (1 - pe * cos(pf));
e1 = atan(pe/sqrt(1-pe*pe));
e2 = z1/4 - e1/2;
e3 =tan(e2);
e4 = tan(pf/2);
v1 = atan(e4/e3);
if (v1 < 0.0)
v1 += z1;
pv = 2 * v1;
pc = ph * z2;
pd = pp * z2;
pb = pq * z2;
pj = pv + pc;
pk = pj - pd;
pl = 1.0 - cos(pb);
px = ( cos(pj) + sin(pk)*sin(pd)*pl) * pr;
py = ( sin(pj) - sin(pk)*cos(pd)*pl) * pr;
if (pno == 1) {
ps = px;
pt = py;
}
pc = ps + px;
pd = pt + py;
pm = atan(pd/pc)/z2;
if (pc < 0.0)
pm += 180.0;
else if (pd < 0.0)
pm += 360.0;
return pm;
}
double fract(x)
double x;
{
long int i;
double y;
i = x;
y = x - i;
return y;
}
sun()
{
double g0,h0,p0,e0,q0,a0;
int pno;
g0 = 360 * fract(0.71455 + 99.99826 * b6);
h0 = 258.76 + 0.323 * b6;
p0 = 0.0;
e0 = 0.016751 - .000042 * b6;
q0 = 0.0;
a0 = 1.0;
pno = 1;
if(ret == 0)
plnt[pno]=planet(g0,h0,p0,e0,q0,a0,pno);
else
plnt[pno+13]=planet(g0,h0,p0,e0,q0,a0,pno);
return 0;
}
mer()
{
double g0,h0,p0,e0,q0,a0;
int pno;
g0 = 360 * fract(0.43255 + 415.20187 * b6);
h0 = 53.44 + 0.159 * b6;
p0 = 24.69 - 0.211 * b6;
e0 = 0.205614 + .00002 * b6;
q0 = 7.00288 + 0.001861 * b6;
a0 = 0.3871;
pno = 2;
if (ret == 0)
plnt[pno] = planet(g0,h0,p0,e0,q0,a0,pno);
else
plnt[pno+13] = planet(g0,h0,p0,e0,q0,a0,pno);
return 0;
}
මෙම වැඩසටහනේ කම්පයිල් අවුට්පුට් රනින් වින්ඩෝව භාගත කර ගැනීමට මෙතනින් යන්න.
No comments:
Post a Comment