චන්ද්රයාගේ භූකේන්ද්රීය පිහිටීම සෙවීමසූර්යයා= Sපෘථිවිය= Eචන්ද්රයා= Mලෙස අංකනය කල විට චන්ද්රයාගේ පෘථිවිය වටා කක්ෂීය චලිතය පහත දැක්වෙන රූපයේ පරිදි දැක්විය හැකිය.
පහත පරිදි තෝරා ගනියි.පෘථිවිය වටා චන්ද්රයාගේ කක්ෂීය(Orbit Motion ) චලිතය සැලකූ විට එහි ප්රධාන Orbit Elemants1) Longitude of Ascending Node2) Inclination3)Argument of Perigee4) Mean distance= semi major axis5) Eccentricity6) Mean anomalyසලකමු.මෙම ලිපි පෙලේ මුල් ලිපියෙන් යම් දිනයකට අදාල "ජූලියන් දින අංකය = JDN)අගය සොයන සැටි හා එම දිනයේ යම් h .mt (h=hour, mt = minutes)වේලාවකට අදාළ ජූලියන් අගය = JD ගනනය කරන හැටි දක්වන ලදී.
JD =JDN + ( h + mt/60 -17.5)/24
(තත්පර අගය නොසලකා)
yd පරාමිතිය පහත පරදි අර්ථ දැක්වූ විට
yd = 367*Y - (7*(Y + ( ( M+9)/12 ) ) ) / 4 + (275*M)/9 + D - 730530 + ( h + mt/60 -17.5)/24
(Y =Year ,M =Month , D = Day , h =hour ,mt =minutes)
*** මෙහි සියළු බෙදීම් කොටස් වල අවසන් අගය ලෙස ගන්නේ දශම අගය ඉවත් කල නිඛිල අගයයි.
උදා :- M= 9
(M+9)/12 = 18/12 =1.5 තෝරා ගන්නේ 1 අගයයි
චන්ද්රයාගේ කක්ෂීය චලිතයේ Orbit Elements
1) Longitude of Ascending Node = N
N= 125.1228_deg - ( (0.0529538083_deg) *yd )
2) Inclination = i
i = 5.1454_deg
3) Argument of Perigee = w
w = 318.0634_deg + ( (0.1643573223_deg) *yd )
4)Mean Distance = semi major axis = a
a= 60.2666
5) Eccentricity = e
e = 0.0549
6) Mean Anomaly = M
M = 115.3654_deg + ( (13.0649929509_deg)*yd )
චන්ද්ර කක්ෂීය චලිතයට අනුරූප N(Longitude of Ascending Node) අගය විචලනය
වීම පිටුපසට(Backwards) සිදුවේ.මෙය වටයක් සම්පූර්ණ කිරීමට (ආවර්ත කාලය) කාලය වසර දහඅට හමාරකි.
w =(Argument of Perigee) අගය විචලනය විමද පසුපස ආකාරවේ.එහි ආවර්ත කාලය වසර 8.8 කි.
ඉහත N,i,w,a.e.M යන සියළු කෝණික පරාමිති අගයයන් (0-360) පරාසය තුල පැවතිය යුතුය.සමීකරණ ආදේශයෙන් එම අගයන් සදහා සෘන අගයන් හෝ 360 ට වැඩි අගයයන් ලැබෙන විට ඒ සදහා සුදුසු පරිවර්තන අගයන් ගත යුතුය.
මෙම පරිවර්තනය පහත සමීකරනයෙන් දැක්වේ.
Normalize x = x - (floor(x/360.0))*360.0
මෙම පරිවර්තනය පහත සමීකරනයෙන් දැක්වේ.
Normalize x = x - (floor(x/360.0))*360.0
උදාහරණයකට
Normalize w = -264.2546 - (floor(-264.2546/360))*360
* w = -264.2546_degඅගය ලැබුනු විට w සදහා තෝරා ගත යුත්තේ
Normalize w = -264.2546 - (floor(-264.2546/360))*360
= -264.2546 - (-1)*360
= -264.2546 + 360
= 95.7454
අගයයි.
* M = -46173.9046_deg
අගය ලැබුනු විට M සදහා තෝරා ගත යුත්තේ
Normalize M =
-46173.9046 -(floor(
-46173.9046/360))*360
=
-46173.9046 - (-129)*360
=
-46173.9046 + 46440
Eccentricity = e
E = M + e.sin(E)
සදහා පලමු ඇස්තමේන්තු අගය ලෙස E(0) = M + e.sin(M)
E = M + e.sin(E)
සදහා පලමු ඇස්තමේන්තු අගය ලෙස E(0) = M + e.sin(M)
නිව්ටන් සන්නිකර්ෂණ ක්රමය අනුව f(E) = 0 ශ්රිතයේ n වැනි මූලය
E(n) = E(n-1) - f(E(n-1)) / f '(E(n-1)) මගින් ලැබේ. මෙහි f '(E())යනු E විෂයෙන් f(E) ශ්රිතයේ එක්වරක් අවකලනයයි.
f(E) = E - M - e.sin(E)
f ' (E) = 1 - e.cos(E)
E(0) = M + e.sin(M)
f(E) = E - M - e.sin(E)
f ' (E) = 1 - e.cos(E)
E(0) = M + e.sin(M)
E(1) = E(0) - (M + e.sin(E(0)) / (1- e.cos(E(0))
. .
. .
. .
පරිගණක වැඩසටහන තුලදී මෙම සන්නිකර්ශන ක්රමය සියුම්ව සිදුකල හැකිය.දක්වා ඇති වැඩසටහනේ මෙම E අගය සදහා සන්නිකර්ශන අගය ලබා ගන්නා අයුරු දක්වා ඇත.
සදහා ලැබෙන අවසන් අගය Ef නම්
. .
. .
. .
පරිගණක වැඩසටහන තුලදී මෙම සන්නිකර්ශන ක්රමය සියුම්ව සිදුකල හැකිය.දක්වා ඇති වැඩසටහනේ මෙම E අගය සදහා සන්නිකර්ශන අගය ලබා ගන්නා අයුරු දක්වා ඇත.
සදහා ලැබෙන අවසන් අගය Ef නම්
True Anomaly = v
v = acos( (cos(Ef) -e)/(1- e.cos(Ef))
මෙහි acos() මගින් ප්රතිලෝම කොස් යන්න නිරූපනයවේ.
C වැඩසටහන් කම්පයිලරය(පැරණි)සමඟ ප්රතිලෝම කොස් ශ්රිතය සම්බන්ධ නොවන නිසා v = 2 * atan (a1/a2)
a1 = tan(Ef/2)
a2 = tan ( z1/4 - b1/2)
z1 = pi = 3.14159265359
b1 = atan(e / sqrt( 1 - e.e))
atan() = ප්රතිලෝම ටෑන්
sqrt() = වර්ග මූල අගය
සමීකරණය වැඩසටහන තුල භාවිතා කර ඇත.
x = r * cos(v) = a * (cos(Ef) - e)
y = r * sin(v) = a * sqrt(1 - e*e) * sin(Ef)
මෙහි atan2() මගින් x,y අගයන් වල ධන සෘන අගයන් අනුව ප්රතිලෝම ටැංජන අගයෙන් ලැබෙන කෝණ අගය කුමන වෘත්ත පාදය තුලවේද යන්න සලකමින් පිළිතුර ලබාදේ.
මෙලෙස x,y,r,v අගයන් ලබාගෙන එම අගයන් ඔස්සේ චන්ද්රයාගේ පෘථිවි කේන්ද්රය වටා ත්රිමාණ චලිතයට අනුරූප x,y,z ඛන්ඩාංක
මෙලෙස x,y,r,v අගයන් ලබාගෙන එම අගයන් ඔස්සේ චන්ද්රයාගේ පෘථිවි කේන්ද්රය වටා ත්රිමාණ චලිතයට අනුරූප x,y,z ඛන්ඩාංක
x = r * ( cos(N) * cos(v+w) - sin(N) * sin(v+w) * cos(i) )
y = r * ( sin(N) * cos(v+w) + cos(N) * sin(v+w) * cos(i) )
z = r * sin(v+w) * sin(i)
මගින් ලබා ගනී.මෙම අගයන් ඔස්සේ පෘථිවි කේන්දයට සාපේක්ෂව චන්ද්රයාගේ
longitude = atan2(y/x)
latitude = atan2(z/sqrt(x*x + y*y))
r = sqrt(x*x + y*y + z*z)
මෙමගින් ලැබෙන්නේ පෘථිවියේ කේන්ද්රයට සාපේක්ෂව අදාළ මොහොතේදී චන්ද්රයාගේ පිහිටීමයි.
සූර්යයාගේ ගුරුත්වාකර්ශන බලපෑම මෙම ගනනය කිරීම් වලට ඇතුලත් කර නොමැති නිසා ලැබෙන අගයයන් ඉතාම නිවැරදි අගයෙන් තරමක් විචලනයවේ.සූර්ය ගුරුත්වාකර්ෂණය හා වෙනත් බලපෑම් මෙම අගයන්ට සම්බන්ධ කොට වඩාත් නිවැරදිව චන්ද්ර පිහිටීම ගනනය කරන අයුරු ඊලඟ ලිපියෙන් විමසා බලමු.එම නිවැරදි අගය ලබා ගැනීමේදී මෙම ගනනය ආරම්භක මූලිකවේ.එබැවින් මෙම කොටස ඉගෙනීම අත්යාවශ්යවේ.
පෘථිවිය වටා චලනය වන චන්ද්රිකාවක උපකාරයෙන් යම් වේලාවකදී පෘථිවි කේන්ද්රයට සාපේක්ෂව චන්ද්රයාගේ පිහිටීම ගනනය කෙරෙන ඔන්ලයින් වැඩසටහනක් පහත දැක්වේ.මෙම ඔන්ලයින් වැඩසටහනෙන් ලැබෙන අගයන් හා මෙම ලිපිය අවසානයේ දක්වා ඇති වැඩසටහනෙන් ලැබෙන අගයන් අතර වෙනසට හේතුව ඉහත දැක්වූ සූර්යයා ඇතුළු වෙනත් ග්රහ වස්තූන්ගේ බලපෑමයි.
පෘථිවිය මත ජීවීන් උපත ලබන්නේ පෘථිවි කේන්ද්රය තුල නොව පෘථිවි පෘෂ්ඨය මත නිසා යම් ස්ථානයක උපන් අයකුගේ ජන්ම වේලාවට අදාළ චන්ද්ර ස්ථුථය ගනනය කල යුත්තේ පෘථිවයේ ජන්මියා උපන් ස්ථානයට සාපේක්ෂ අයුරිනි.එයට අදාළ ගනනයද ඉදිරි ලිපි මගින් දක්වමි.ජන්ම කේන්ද්රයේ නැකත ඇතුළු පංචාංගය ගනනය කිරීමටත් විංශෝත්තරී මහ දශා ශේෂය ගනනය කිරීමටත් පාදක කොට ගන්නේ මෙම ජන්මියා උපන් ස්ථානයට අනුරූප චන්ද්ර පිහිටීමය(Topocentric Position)
චන්ද්රයාගේ පිහිටීම ගනනය කිරීමට සැකසූ වැඩසටහනේ කම්පයිල් අවුට්පුට් වින්ඩෝව මෙතනින් බාගත කරගන්න.
චන්ද්රිකා දත්ත අනුව කිසියම් මොහොතක චන්ද්රයාගේ පිහිටීම ගනනය කිරීමට ඔන්ලයින් වැඩසටහනට මෙතනින් යන්න(Go sun and moon position calculator)
-------------------------------------------------------------------------------------------------------------
Calculate Moon's Geocentric Position - C Program
#include<stdio.h>
#include<conio.h>
#include<math.h>
# define TRUE 1
extern double sqrt(), sin(), cos(), tan(), atan(), atan2(), fabs(), fmod();
double z1,z2 ;
double plnt[26];
char *ras[] = {"MESHA","VRUSHABA","MITHUNA","KATAKA","SINHA","KANNYA","THULA","VHUSCHIKA","DHANU","MAKARA","KUMBA","MEENA"};
long int yd(d,m,y)
long int d,m,y;
{
long int j,a9,y9,m9;
float b;
a9 =(m+9)/12;
y9 =(275*m)/9 ;
m9 = (7*(y + a9))/4 ;
j = 367*y -m9 + y9 + d -730530;
return(j);
}
double rev(double x)
{
return x -floor(x/360.0)*360;
}
double moon(pm,pe,pa,NN,ww,i1)
double pm,pe,pa,NN,ww,i1;
{
double pb,pf,pc,pd,pr,e1,e2,e3,e4,v1,pv,px,py,pex,pey,pez,moonlong,moonlat,moonr;
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;
px = pa*(cos(pf) - pe);
py = pa*(sqrt(1- pe*pe))*sin(pf);
pr = sqrt(px*px + py*py);
pex = pr*(cos(NN*z2)*cos(pv+ww*z2) -(sin(NN*z2)*sin(pv+ww*z2)*cos(i1*z2)));
pey = pr*(sin(NN*z2)*cos(pv+ww*z2) + (cos(NN*z2)*sin(pv+ww*z2)*cos(i1*z2)));
pez = pr*sin(pv+ww*z2)*sin(i1*z2);
if(pey>0 && pex>0)
moonlong = (atan(pey/pex))/z2;
if((pey>0 && pex<0) || (pey<0 && pex<0))
moonlong = 180 + (atan(pey/pex))/z2;
if(pey<0 && pex>0)
moonlong = 360 + (atan(pey/pex))/z2;
moonr = sqrt(pex*pex + pey*pey + pez*pez);
printf("\n MOON'S GEOCENTRIC POSITION \n" );
printf("\n LONGITUDE %7.5lf \n",moonlong);
printf("\n DISTANCE %7.5lf \n",moonr);
return 0;
}
main()
{
long int d,m,y,j,h,mt,i ;
double N1,ii,w1,aa,e,M1,N,w,M ;
z1 = 3.14159265359;
z2 = z1/180;
printf("------programmed By B.D.CHANDANA PRABATH (JHOTHISHALANKA) -------\n");
printf("\n\n\n\nEnter Date (Day.Month.Year) Ex:- 1979/03/16 =16.3.1979 \n ");
scanf("%ld.%ld.%ld", &d, &m, &y);
printf("\n\n\n\n\nEnter Time (h.mt) (24 hour) Ex:- 10:31AM=10.31 , 10.31PM=22.31 \n ");
scanf("%ld.%ld", &h, &mt);
j = yd(d,m,y);
N1 =125.1228 - (0.0529538083)*j;
ii = 5.1454 ;
w1 =318.0634 +(0.1643573223)*j;
aa = 60.26666;
e = 0.054900;
M1 = 115.3654 + (13.0649929509)*j;
N =rev(N1);
w =rev(w1);
M =rev(M1);
moon(M,e,aa,N,w,ii);
getch();
return 0;
}
No comments:
Post a Comment