Wednesday, November 9, 2011

Mathematical Background of computer astrology - part 4 ( චන්ද්‍රයාගේ භූකේන්ද්‍රීය පිහිටීම සෙවීම )


 චන්ද්‍රයාගේ භූකේන්ද්‍රීය පිහිටීම සෙවීම

 සූර්යයා= S
 පෘථිවිය= E
 චන්ද්‍රයා= M
      ලෙස අංකනය කල විට චන්ද්‍රයාගේ පෘථිවිය වටා කක්‍ෂීය චලිතය පහත දැක්වෙන රූපයේ පරිදි දැක්විය හැකිය.
       



   පෘථිවිය වටා චන්ද්‍රයාගේ කක්‍ෂීය(Orbit Motion ) චලිතය සැලකූ විට එහි ප්‍රධාන Orbit Elemants
        1) Longitude of Ascending Node
        2) Inclination
        3)Argument of Perigee
        4) Mean distance= semi major axis
        5) Eccentricity
        6) 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

 උදාහරණයකට
           
*   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

 
= 266.0954



    Eccentric Anomaly = E
    Mean Anomaly = M
    Eccentricity = e
     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)
    E(1) = E(0) - (M + e.sin(E(0)) / (1- e.cos(E(0))
       .         .
       .         .
       .         .

 පරිගණක වැඩසටහන තුලදී මෙම සන්නිකර්ශන ක්‍රමය සියුම්ව සිදුකල හැකිය.දක්වා ඇති වැඩසටහනේ මෙම 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() = වර්ග මූල අගය
               
සමීකරණය වැඩසටහන තුල භාවිතා කර ඇත.

  පෘථිවිය වටා චන්ද්‍රයාගේ කක්‍ෂීය චලිතය  Lunar Orbit ආකාරය නිසා පෘථිවි කේන්ද්‍රය මූලය වූ ද්විමාන ඛන්ඩාංක පද්ධතියේ x,y ඛන්ඩාංක පලමුව සැලකූ විට

x = r * cos(v) = a * (cos(Ef) - e)
    y = r * sin(v) = a * sqrt(1 - e*e) * sin(Ef)


r = sqrt( x*x + y*y ) 
    v = atan2( y/x ) 
      මෙහි  atan2() මගින්  x,y  අගයන් වල ධන සෘන අගයන් අනුව ප්‍රතිලෝම ටැංජන අගයෙන් ලැබෙන කෝණ අගය කුමන වෘත්ත පාදය තුලවේද යන්න සලකමින් පිළිතුර ලබාදේ.
             මෙලෙස  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;

}

6 comments:

Asanka Udayanga said...

නිකන් උඩින් බලන් ගියේ,ඒත් වටින ගනනය කිරීමක් තියෙන්නේ,පෙජ් එක සේවු කරා,හෙට නිවීසෑනසිල්ලේ ගාන හදන්න ගන්න ඕන.......:)))

Anonymous said...

මහත්මයා,

මෙය ඉහත ලිපියට සම්බන්ද ගැටලුවක් නොවයි.
මොකක්ද ඔබගේ අදහස මේ ලිපිය ගැන?

නොවැම්බර් 15 සෙනසුරු මාරුවෙන් පසුව රටේ මහා පෙරළියක්.

http://www.gossip9.com/2011/11/15.html

මා බලාපොරොත්තුව සිටිනවා පිළිතුරක් ඔබෙන්.
ඔබ නිදහස් නම් පිළිතුරු දෙන්න.

ස්තුතියි

-Nathan-

Chanaka Aruna Munasinghe said...

මේ වෙලාවෙනම් මේක මොළේට දා ගන්න බෑ.
ඒත් පාඩම් මාලව දිගටම ලියාගෙන යන්න (කමෙන්ට් ඇතත් නැතත්)

කාට හරි කවද හරි වැදගත් වෙයි.

Chanaka Aruna Munasinghe said...

@Anonymous

සෙනසුරු මාරුවත් සමඟ සිදුවන පෙරලියක් ගැන විශ්මිත අනාවැකියක් මෙතන තිබේ


http://ctkumara.blogspot.com/2011/11/80.html

Anonymous said...

වටිනා ලිපි පෙලක් . බොහොම ස්තුතියි

Anonymous said...

wiki eken gaththa oya orbit of moon waradi hondata balanna.