Sinhala Wela akka Wal Katha






මෑ මල දිවෙන් කිතිකවලා තන්දෙක මිරිකලා උරලා කෙදිරි ගෑවෙන්න සැපදෙන හැටි දැනගන්න.

අතේ ගහන ගමන් වල් වීඩියෝ එකක් බලන්න සිංහල වල්කතා වක් කියවන ගමන් ගෑණු අයට පුළුවන් ඇගිල්ල ගහන ගමන් තනියෙන්ම සැපගන්න.

පට්ට ආතල් එකක් තියෙන්නේ සිංහල වල් කතා කියවන ගමන් හුත්තට ඇගිල්ල ගහගෙන බඩු යවනකොට. කොල්ලන්ට පුළුවන් අතේ ගහන්න. සියල්ල බලන්න
මෙතැනින් සෙට් වෙන්න
Showing posts with label පරිගණක ජ්‍යොතිෂ මෘදුකාංග. Show all posts
Showing posts with label පරිගණක ජ්‍යොතිෂ මෘදුකාංග. Show all posts

Sunday, November 20, 2011

Mathematical Background of computer astrology - part 7( නැකත, නැකැත් පාදය ,විංශෝත්තරී මහ දශාව හා එම මහ දශා ශේෂය සෙවීම)

7 නැකත, නැකැත් පාදය ,විංශෝත්තරී මහ දශාව හා එම මහ දශා ශේෂය සෙවීම.

 මීට පෙර ලිපියෙන් යම් වේලාවක  චන්ද්‍ර,රාහු කේතු ග්‍රහස්ඵුථ හා එම ග්‍රහයන් පිහිටන රාශින් සෙවීමට ගණිත සිද්ධාන්ත ඉදිරිපත් කරන ලදී.

 එහිදී   d3 = plnt[7]   අගයෙන් චන්ද්‍ර ස්ඵුථය ලැබී ඇත.

       nak = plnt [7] * 3 /40
       pada = [4 * fract( nak)] +1     (   fract(nak) = fractional value of (nak) )
       nakn = integer part of  nak


1) (nakn +1)    මගින් නැකත ලැබේ.
   (nakn +1)      = 1 නම් අස්විද
   (nakn +1)      = 2 නම් බෙරණ
    (nakn +1)     = 3 නම් කැති
        .
        .
        .
        .
    (nakn +1)    = 27 නම් රේවතී

    
2) pada මගින් නැකැත් පාදය ලැබේ

3) vim = 9.0 *fract (plnt[7]/ 120)
    vimn = fract(vim)
    q = int (vim)   (integer part of vim )
 
      aa=(1-vimn)*yy[q];

 මෙහි  yy[q=0] =7    (කේතු මහ දශාවේ කාලය අවු 7)
           yy[1]=20    (සිකුරු මහ දශාවේ කාලය අවු 20)
          yy[2] =6      (රවි මහ දශාවේ කාලය අවු 6)
          yy[3] =10    (සදු මහ දශාවේ කාලය අවු 10)
           yy[4]=7    (කුජ(අඟහරු) මහ දශාවේ කාලය අවු 7)
          yy[5] =18    (රාහු මහ දශාවේ කාලය අවු 18)
           yy[6]=16    (ගුරු මහ දශාවේ කාලය අවු 16)
           yy[7]=19    (ශනි මහ දශාවේ කාලය අවු 19)
           yy[8]=17    (බුධ මහ දශාවේ කාලය අවු 17)





      bb=int(aa);   (integer part of aa
      ee=aa-bb;
      ff=ee*12;
     cc=(int)ff;
     gg=ff-cc;
     hh=gg*30;
     dd=(int)hh


 ඉහත   bb,cc,dd අගයන් වලින් ලබාදෙන වේලාවට අනුරූප මහදශාවෙන් ඉතිරි කාලය(මහ දශා ශේෂය) පිළිවෙලින් වර්ෂ,මාස දින වලින් ලැබේ.

මේ දක්වා ඉදිරිපත් කල යම් වේලාවකට අනුරූප ලග්නය රවි,බුධ,චන්ද්‍ර ,රාහු ,කේතු ග්‍රහස්ඵුථ (බුද්ධිමය දේපල වටිනාකම ගැන සලකා අනිත් ග්‍රහයන්ගේ ග්‍රහස්ඵුඵ ගනනය කිරීමට අදාළ කොටස් ඉදිරිපත් කොට නැත.නමුත් අන්තර්ජාලයේ සැරිසැරීමට දන්නා හා උසස් ගණිතය පිළිබද වැටහීමක් ඇති අයට අනිත් ග්‍රහයන්ගේ ග්‍රහස්ඵුථ ගනනයට අදාළ ගණිත කොටස් සොයා ගැනීම අසීරු නැත.) හා නැකත නැකැත් පාදය මහ දශාව හා එහි දශා ශේ'ය ගනනය කිරීමට සකස් කරන ලද සැකසූ  වැඩසටහනක් පහත දක්වා ඇති අතර  වැඩසටහන් ගැන අවබෝධයක් නැති අයගේ පහසුව තකා එහි ප්‍රතිදාන වැඩසටහන භාගත කිරීමේ පහසුව සලසා ඇත.එය භාගත කොට ඔබගේ උපන් දිනය වේලාව හා ස්ථානයේ අක්‍ෂාංශ දේශාංශ එහි දක්වා ඇති පරිදි ඇතුලත් කොට එමගින් ලැබෙන ප්‍රතිදානය හා ඔබගෙ  ජන්ම කේන්ද්‍රය හා සසදා බලන්න.
  

                                                            නිමි.

 භාගත කිරීමට මෙතනින් යන්න (download LITTLEHO.rar --> Extract --> run LITTLEHO.EXE)

--------------------------------------------------------------------------------------------------------------

#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,G,tt[4];
int ret = 0, page =1, line, r3[13], s3[13], varga[13][7];
double plnt[26];
char *ras[] = {"MESHA","VRUSHABA","MITHUNA","KATAKA","SINHA","KANNYA","THULA","VHUSCHIKA","DHANU","MAKARA","KUMBA","MEENA"};
char *nak[] = {"ASVIDA", "BERANA", "KETTI", "REHENA", "MUWASIRASA", "ADA",
       "PUNAWASA", "PUSA", "ASLISA", "MA", "PUWAPAL",
        "UTTRAPAL", "HATHA", "SITHA", "SA", "VISA",
        "ANURA", "DHETA", "MULA", "PUWASALA", "UTTRASALA",
        "SUWANA", "DHENATA", "SIYAWASA", "PUWAPUTUPA",
        "UTTRAPUTUPA", "RHEWATEE"};
char *x1[] = {"KETU     ", "SIKURU   ", "RAVI     ", "SADU     ", "KUJA     ",
         "RAHU     ", "GURU     ", "SHANI    ", "BUDA     "};
double yy[] = {7, 20, 6, 10, 7, 18, 16, 19, 17};
char *day[] = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY",
        "FRIDAY", "SATURDAY"};
long int LG;


long int jd(d,m,y)
long int d,m,y;
{
 long int j,a9,y9,m9,a1,b1,c1,d1,JDN;
 float b;

  a9 = (14-m)/12;
  y9 = y + 4800 - a9 ;
  m9 = m + 12*a9 -3 ;

  a1= (153*m9 +2)/5;
  b1 = y9/4;
  c1 = y9/100;
  d1 = y9/400;

  JDN = d + a1 + 365*y9 + b1 - c1 + d1 - 32045 ;

  j = JDN - 1720995 ;

 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;

      plnt[pno]=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;

      plnt[pno] = planet(g0,h0,p0,e0,q0,a0,pno);

      return 0;
 }
moon()
{
  double g1,h1,a0,b0,c0,g0,e0,d0,f0,l0;
  double r0,d3,d4,d5;

       g1 = 360 * fract(0.71455 + 99.99826 * b6);
       h1 = 258.76 + 0.323 * b6;
       a0 = 360 * fract(0.68882 + 1336.851353 * b6);
       b0 = 360 * fract(0.8663 + 11.298994 * b6 -3.0e-5 * b6 * b6);
       c0 = 360 * fract(0.65756 - 5.376495 * b6);
  if (c0 < 0.0)
      c0 += 360.0;
       g0 = z2 * (a0-b0);
       e0 = z2 * (g1-h1);
       d0 = z2 * (a0-g1);
       f0 = z2 * (a0-c0);
       l0 = a0 + 6.2888*sin(g0) + 0.2136*sin(2*g0) + 0.01*sin(3*g0) + 1.274*sin(2*d0-g0) + 0.0085*sin(4*d0-2*g0);
       l0 = l0 - .0347*sin(d0) + 0.6583*sin(2*d0) + 0.0039*sin(4*d0) - 0.1856*sin(e0) - .0021*sin(2*e0) + 0.0052*sin(g0-d0);
       l0 = l0 - .0588*sin(2*g0-2*d0) + .0572*sin(2*d0-g0-e0) + .0533*sin(g0+2*d0) + .0458*sin(2*d0-e0) + .041*sin(g0-e0) - .0305*sin(g0+e0);
       l0 = l0 - .0237*sin(2*f0-g0) - .0153*sin(2*f0-2*d0) + .0107*sin(4*d0-g0) - .0079*sin(-g0+e0+2*d0) - .0068*sin(e0+2*d0) + .005*sin(e0+d0);
       l0 = l0 - .0023*sin(g0+d0) + .004*sin(2*g0+2*d0) + .004*sin(g0-e0+2*d0) - .0037*sin(3*g0-2*d0) - .0026*sin(g0-2*d0+2*f0) + .0027*sin(2*g0-e0);
       l0 = l0 - .0024*sin(2*g0+e0-2*d0) + .0022*sin(2*d0-2*e0) - .0021*sin(2*g0+e0) + .0021*sin(c0*z2) + .0021*sin(2*d0-g0-2*e0);
       l0 = l0 - .0018*sin(g0+2*d0-2*f0) + .0012*sin(4*d0-g0-e0) - .0008*sin(3*d0-g0);
       r0 = z2*2*(l0-c0);
       d3 = l0 - 0.1143*sin(r0) + .004;
  if (d3 >= 360.0)
       d3 -= 360.0;
  if (d3 < 0.0)
       d3 += 360.0;

       plnt[7] = d3;

  d4 = c0;

 plnt[8] = d4;

  d5 = c0 + 180.0;
  if (d5 >= 360.0)
       d5 -= 360.0;

       plnt[9] = d5;

       return 0;
}


ayan()
{
       plnt[0] = 22.460148 + 1.396042*b6 + 3.08e-4*b6*b6;
return 0;
}

bhav()
{
   double a0,b0,c0;
   int i;
   double bhavspl();

   aya = plnt[0];
   obliq = 23.452294 - 0.0130125 * b6;
   a0 = 24 * fract(0.2769 + 100.00214 * b6);
   b0 = h6 * 24 + 12;
   c0 = longt / 15;
   sidtime = 24 * fract( (a0+b0+c0) / 24);
   if (sidtime < 0)
       sidtime += 24.0;

   G = bhavspl(sidtime,lat);
   LG = G/30;

       printf("Ayanamsa        : %7.2lf\n", plnt[0]);
       printf("obliquity       : %7.2lf\n", obliq);
       printf("sideral Time    : %7.2lf\n\n", sidtime);
       printf("Ascendant Longitude (Lagna Sputa)   : %7.2lf \n",G);
       printf("Lagnaya     : %s \n",ras[LG]);
       printf("press Any Key   ");
return 0;
}


double bhavspl(a0, c0)
double a0, c0;
{
  double r0, w0, b0, g0;

  r0 = aya;
  w0 = obliq * z2;
  b0 = a0 *15 + 90.0;
  if (b0 >= 360.0)
      b0 -= 360.0;
  a0 *= z1 /12;
  c0 *= z2;
  if (a0 == 0.0 && c0 == 0.0)
      return 90.0;
  g0 = atan(-cos(a0)/(sin(c0) * sin(w0)/cos(c0)+sin(a0)*cos(w0)));
  g0 /= z2;
  if (g0 < 0.0)
      g0 += 180.0;
  if (b0 -g0 > 75.0)
      g0 += 180.0;
      g0 -= r0;
  if (g0 < 0.0)
      g0 += 360.0;
  if (g0 > 360.0)
      g0 -= 360.0;
      return g0;
}
 vimst()
{
   double d0, n0,aa,ee,ff,gg,hh;
   int q,dd,bb,cc;

   d0 = plnt[7];
   d0 = 9.0 * fract(d0/120);
   n0 = fract(d0);
   q = (int)d0;
   aa=(1-n0)*yy[q];
   bb=(int)aa;
   ee=aa-bb;
   ff=ee*12;
   cc=(int)ff;
   gg=ff-cc;
   hh=gg*30;
   dd=(int)hh;
   printf("\n Maha Dasa Balance = Years    Months    Days   \n");
   printf("\n       %s     %2d       %2d       %2d  \n",x1[q],bb,cc,dd);
   return 0;
   }

nakath()
{
int na,part;
double naksha ;

naksha = plnt[7]*3/40;
tt[1] = naksha;
part = 4*fract(tt[1])+1;
na = (int) tt[1];

printf("\n NAKATHA      : %s  \n",nak[na]);
printf("\n NAKATH PADA   : %d \n",part);

return 0;
}

main()
{
long int d,m,y,j,h,mt,i ;
int latdeg, latmt, longdeg, longmt,an,bn,cn,anx,bnx;
double fract(), planet(),aa1,bb1,cc1,aax,bbx ;
char ns,ew;

ps = 0.0;
 pt = 0.0;
 z1 = 3.14159265359;
 z2 = z1/180;
 s1 = 99.99826;

printf("          PROGRAMMED BY :B.D. CHANDANA PRABATH(JHOTHISHALANKA)\n");

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);
 printf("\n\n\n\nEnter Birth city Latitude(latdeg.latmt n/s:)  Ex :- Kalutara=6.22 n  \n ");
 scanf("%d.%d %c", &latdeg, &latmt, &ns);
 printf("\n\n\n\nEnter Birth city Longitude(longdeg.longmt e/w:)  Ex:- Kalutara=79.58 e  \n ");
 scanf("%d.%d %c", &longdeg, &longmt, &ew);
 lat = (double)latdeg + (double)latmt / 60;
 if (ns == 'S' || ns == 's')
 lat = -lat;
 longt = (double)longdeg + (double)longmt / 60;
 if (ew == 'W' || ew == 'w')
 longt = -longt;


 j = jd(d,m,y);
 h6 = ((double)h + (double)mt / 60 - 17.5) / 24;
 b6 = (j - 694025 + h6) /36525;
 j = (j+4)%7;
 printf("\n Day is  : %s \n",day[j]);
 ayan();
 sun();
 mer();
 moon();
 bhav();
 getch();
 aax = plnt[1];
  bbx = plnt[2];
  aa1 = plnt[7];
  bb1 = plnt[8];
  anx = aax/30;
  bnx =bbx/30;

   cc1 = plnt[9];

  an = aa1/30 ;
  bn = bb1/30 ;
  cn = cc1/30;
 printf("\n\n  PLANET       LONGITUDE       RASI   \n");
 printf("\n  --------------------------------     \n");
 printf("\n  Sun          %7.2f         %s     \n",aax,ras[anx]);
 printf("\n  Mercury      %7.2f         %s     \n",bbx,ras[bnx]);
 printf("\n  MOON        %7.2f          %s     \n",aa1,ras[an]);
 printf("\n  RAHU        %7.2f          %s     \n",bb1,ras[bn]);
 printf("\n  KETU        %7.2f          %s     \n",cc1,ras[cn]);
 printf("\n  --------------------------------     \n\n");
 nakath();
 vimst();
 getch();
 return 0;

}

Mathematical Background of computer astrology - part 6 ( චන්ද්‍ර ස්ඵුථය හා රාහු කේතු ග්‍රහස්ථුට ගනනය සදහා සමීකරණ)

  මීට පෙර ලිපි මගින් චන්ද්‍රයාගේ පිහිටීම ගනනය සදහා සිද්ධාන්ත පද්ධතිය විස්තර කරන ලදී.මෙම ලිපියෙන් චන්ද්‍රයාගේ හා රාහු කේතු ග්‍රහයන්ගේ ග්‍රහස්ඵුට හා එමගින් එම ග්‍රහයන් පිහිටි රාශීන් සෙවීමට අදාළ සමීකරණ ඉදිරිපත් කෙරේ.
 වර්ෂය = year ,  මාසය = month ,   දිනය= day   
 වේලාව  පැය =hour   මිනිත්තු =minutes   (පැය 24 ඔරලෝසු වෙලාවෙන්)    ලෙස ගත්විට

 මෙම ලිපි පෙලේ පලමු ලිපියේ දැක්වූ පරිදි(නැවත එම පලමු ලිපිය බැලීම අවශ්‍ය නැත.)



                             ජූලියන් දින අංකය (JDN)

              

 ඉතා වැදගත් 
         ඉහත සමීකරණවල දැක්වෙන බෙදීම් කොටස් වලදී ලැබෙන දශම අගයන් ඉවත් කර පූර්ණ සංඛ්‍යා අගයන් ගත යුතුය.  එනම් 
  (14-month)/12 ,  (153m +2)/5  , y/4 , y/100 , y/400   කොටස් වල තෝරා ගන්නේ පූර්ණ සංඛ්‍යාත්මක අගයයි.

    අදාල දිනයේ කිසියම් වූ වේලාවකට අනුරූප "ජූලියන් ඩේට්" අගය(JD)

                        

     සමීකරණ වලින් දැකවේ.
     ඉහත JDN  අගයෙන් 1720995 ක් අඩු කල විට ලැබෙන අගය j ලෙස ගත්විට
                              j = JDN - 1720995


                    b6 = (j - 694025 + h6) /36525

           මෙහි  h6 = (h + mt / 60 - 17.5) / 24


       g1 = 360* {fract[ 0.71455 + (99.99826) *(b6) ] }
        මෙහි fract [ x ]   මගින්  x අගයේ fractional අගය අර්ථ දැක්ව.
         * ලකුනින් ගුණිතය(වැඩි කිරීම) දැක්වේ.
         (මෙහි පසුවට දැක්වෙන ප්‍රකාශණ වලත් මෙම fract[] , *  පදවල අර්ථය මෙලෙසම වේ.)
         උදා  x = 10.53 නම්   fract[x]= 0.53

     h1 = 258.76  + 0.323 * (b6)
     a0  = 360* {fract[ 0.68882 + (1336.851353) *(b6) ] }
     b0 = 360* {fract[ 0.8663 + (11.298994)*(b6) - (3.0)*(e-5 )*(b6)*(b6) ] }  
 c0 = 360* {fract[ 0.65756 - (5.376495) *(b6) ] }                                                 
c0 < 0 නම්    c0 අගයට 360 ක් එකතු කර එම අගය c0  ලෙස ගත යුතුය 
g0 = (a0 -b0)
e0 = (g1 - h1) 
d0 = (a0 - g1)
f0 = (a0 – c0) 
L1 = a0 + 6.2888 *sin(g0) + 0.2136*sin(2*g0) + 0.01*sin(3*g0) 
           + 1.274*sin(2*d0 - g0) + 0.0085*sin(4*d0 - 2*g0)
L2 = - 0.0347*sin(d0) + 0.6583*sin(2*d0) + 0.0039*sin(4*d0)
           – 0.1856*sin(e0) - 0.0021*sin(2*e0) + 0.0052*sin(g0-d0)
 L3  = - 0.0588*sin(2*g0-2*d0) + 0.0572*sin(2*d0-g0-e0)
              + 0.0533*sin(g0+2*d0) + 0.0458*sin(2*d0-e0)
                +0.041*sin(g0-e0) -0.0305*sin(g0+e0)
L4  = - 0.0237*sin(2*f0-g0) - 0.0153*sin(2*f0-2*d0)  +0.0107*sin(4*d0-g0) -0.0079*sin(g0+e0+2*d0)   -0.0068*sin(e0+2*d0)+0.005*sin(e0+d0)
                                                                                                                                                                                                                       
L5 =  - 0.0023*sin(g0+d0) + 0.004*sin(2*g0+2*d0)  + 0.004*sin(g0-e0+2*d0) -0.0037*sin(3*g0-2*d0) -0.0026*sin(g0-2*d0+2*f0)+0.0027*sin(2*g0-e0)     
  
L6 = -0.0024*sin(2*g0+e0-2*d0)+0.0022*sin(2*d0-2*e0)  - 0.0021*sin(2*g0+e0) 
             + 0.0021*sin(c0*z2)+ 0.0021*sin(2*d0-g0-2*e0)  
L7= -0.0018*sin(g0+2*d0-2*f0)+0.0012*sin(4*d0-g0-e0)-0.0008*sin(3*d0-g0) R0=2*(L1+L2+L3+L4+L5+L6+L7-c0)       
D3 =  (L1 +L2 +L3+L4+L5+L6+L7) + 0.004  - 0.1143*sin(R0)                                                             
D3<0.0 නම්  D3 අගයට 360 ක් එකතු කර එම අගය  අගය D3 ලෙස ගත යුතුය.                                                                         D3 >=360.0 නම් D3 අගයෙන් 360 ක් අඩු කර එම අගය  D3 අගය ලෙස ගත යුතුය.                                              
  මෙලෙස ලබා ගත් අවසාන අගය  D3Fනම්  D3F මගින් චන්ද්‍රයාගේ ග්‍රහස්ඵුටය ලැබේ.                                                                          
         D3F/30 හි නිඛිල අගයට 1 ක් එකතු කල විට චන්ද්‍රයා සිටින රාශිය ලැබේ                                                  ( 1 නම් මේෂ ,2 නම් වෘෂභ ,.....12 නම් මීන )
       d4 = c0  හා d5 = c0 + 180.0      ලෙස ගනිමු d5 >= 360.0 නම් d5 අගයෙන් 360.0 ක් අඩුකර එම අගය  d5 ලෙස ගත යුතුය.  මෙලෙස ලැබෙන  d4 හා අවසාන d5 අගයන් වලින් පිළිවෙලින් රාහු හා කේතු පිහිටීම ලැබේ.     ((d4 /30 ) හි නිඛිල අගය  + 1) මගින් රාහු පිහිටි රාශියේ අංකයත් ((අවසාන d5/30) හි නිඛිල අගය  + 1)  මගින් කේතු පිහිටි රාශියේ අංකයත් ලැබේ.    

Monday, November 14, 2011

Mathematical Background of computer astrology - part 5( චන්ද්‍රයාගේ පිහිටීමට සූර්ය ගුරුත්වයේ බලපෑම සෙවීම )

 චන්ද්‍රයාගේ භූ කේන්ද්‍රීය පිහිටීම සොයන අයුරු පසුගිය ලිපියෙන් දැක්වීය.එහිදී අපගේ ගනනයෙන් ලත් අගයත් චන්ද්‍රිකා දත්ත අනුව ලැබෙන අගයත් අතර වෙනසක් ඇති වූයේ සූර්යයාගේ ගුරුත්ව බලපෑම එහිදී සැලකීම නොකළ බැවිනි. චන්ද්‍රයා මත සූර්ය  හා වෙනත් ගුරුත්වාකර්ෂණ කැලැඹීම (Perturbations) නිසා එහි පිහිටීම දැක්වෙන දෛශිකයේ සංරචක වලට එකතු විය යුතු අගයයන් ගනණය කිරීම මෙම ලිපියෙන් දැක්වේ.


             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  සැලකූ විට


w = 282.9404_deg + 4.70935E-5_deg   * yd    (longitude of perihelion)
a = 1.000000 (mean distance, a.u.)
e = 0.016709 - 1.151E-9 * yd (eccentricity)
M = 356.0470_deg + 0.9856002585_deg * yd (mean anomaly)
 
 
 ඉහත දැක්වූ සූර්ය Orbit අගයන් ගණනයේදී මීට පෙර ලිපියෙන් දැක්වූ චන්ද්‍ර Orbit Elements  මෙන්ම (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
 
 
 
ඒ අනුව මීට පෙර දැක්වූ ලිපයේ ගණනය කල චන්ද්‍ර  Orbit Elements ද සලකා
 


Sun's  mean longitude:        Ls = w + M (for the sun)
Moon's mean longitude: Lm = N + w + M (for the Moon)
Sun's mean anomaly: Ms= Sun's M (already computed)
Moon's mean anomaly: Mm= Moon's M (already computed)
Moon's mean elongation: D = Lm - Ls
Moon's argument of latitude: F = Lm - N
 
 
 චන්ද්‍රයා මත සූර්ය ගුරුත්ව කැලැඹීම(Perturbations)  නිසා චන්ද්‍රයාගේ භූ කේන්ද්‍රීය පිහිටුම් දෛශිකයේ සංරචක (Longitude,Latitude,Distance) වලට එකතු විය යුතු අගයන් පහත සමීකරණ මගින් දැක්වේ.


Perturbations in longitude (degrees):


-1.274_deg * sin(Mm - 2*D)    (Evection)
+0.658_deg * sin(2*D) (Variation)
-0.186_deg * sin(Ms) (Yearly equation)
-0.059_deg * sin(2*Mm - 2*D)
-0.057_deg * sin(Mm - 2*D + Ms)
+0.053_deg * sin(Mm + 2*D)
+0.046_deg * sin(2*D - Ms)
+0.041_deg * sin(Mm - Ms)
-0.035_deg * sin(D) (Parallactic equation)
-0.031_deg * sin(Mm + Ms)
-0.015_deg * sin(2*F - 2*D)
+0.011_deg * sin(Mm - 4*D)
 
 ( මෙම කොටස් සියල්ල එකතු කොට ගත යුතුය.)

Perturbations in latitude (degrees):

-0.173_deg * sin(F - 2*D)
-0.055_deg * sin(Mm - F - 2*D)
-0.046_deg * sin(Mm + F - 2*D)
+0.033_deg * sin(F + 2*D)
+0.017_deg * sin(2*Mm + F)
 
( මෙම කොටස් සියල්ල එකතු කොට ගත යුතුය.)

 Perturbations in lunar distance (Earth radii):


-0.58 * cos(Mm - 2*D) - 0.46 * cos(2*D) 
 මෙම සංරචක අගයන් චන්ද්‍රයාගේ භූ කේන්ද්‍රීය පිහිටීම සදහා ගනනය කල (මීට පෙර ලිපියේ) පිහිටුම් දෛශික සංරචකයන්ට (Longitude,Latitude,Distance) එකතු කර ගත යුතුය.

 උදාඃ-
   පෙර ලිපියේ ගනනයෙන් ලද චන්ද්‍රයාගේ පෘථිවි කේන්ද්‍රයට  සාපේක්‍ෂ පිහිටුම් සංරචක

Longitude = 308.3616_deg

Latitude  = -0.3937_deg
Distance  = 60.6713
                 සහ        සූර්ය කැලැඹීමට අදාළ පිහිටුම් සංරචක
longitude = - 1.4132_deg

Latitude  = - 0.1919_deg
Distance  = 0.0066 
 
 
ලෙස ලැබුනි නම්  
 
 සූර්ය බලපෑමත් සමඟ චන්ද්‍රයාගේ පෘථිවි කේන්ද්‍රයට සාපේක්‍ෂ පිහිටීමේ සංරචක


long = 308.3616_deg - 1.4132_deg  =  306.9484_deg
lat = -0.3937_deg - 0.1919_deg = -0.5856_deg
dist = 60.6713 + 0.0066 = 60.6779 Earth radii
 
ලෙස වඩාත් නිවැරදි අගයන් ලැබේ.

           *  ජ්‍යොතිෂයේ චන්ද්‍ර ස්ථුථය ගනනය සදහා මින්  Longitude අගය යොදා ගනී.
 


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;

}

Thursday, November 3, 2011

Mathematical Background of computer astrology - part 3 (ලග්න ස්ඵුථය හා ලග්නය සෙවීම )

 ලග්නය සෙවීම

     මේ සදහා ප්‍රධාන වශයෙන්
         *උපන් දිනය
         *උපන් වේලාව
         *උපන් ස්ථානය (අක්‍ෂාංශය හා දේශාංශය)

   උපයෝගී කරගනී.මෙම දත්ත අනුව තවත් පරාමිති තුනක් ගනනය කර ගතයුතුය
     1) අයනාංශය(Ayanamsa)
     2) ඇලය(Obliquity)
     3) තාරකා(නක්‍ෂත්‍ර) කාලය (Sideral Time)
         මෙම පරාමිති ඔස්සේ ලග්න ස්ඵුථය හා ලග්නය සෙවීම සිදු කල හැකිය.
 (මෙහිදී අයනාංශය යොදා ගන්නේ පෙරදිග ජ්‍යොතිෂයේදී අයනය රහිත (නිරයන) ක්‍රමය උපයෝගී වන බැවිනි.මෙහි අයනය යනු "වෙනස් වීම" දැක්වීමට යොදන වචනයකි.මෙහිදී අයනය ලෙස සලකන්නේ පෘථිවියේ භ්‍රමණ අක්‍ෂය කාලයත් සමඟ පූර්වායනය වීමයි.
     ජ්‍යොතිෂ මෘදුකාංග වලදී අයනාංශය ගනනය කිරීම සදහා විවිධ තාරකා විද්‍යාඥයන් දෛවඥයන් විසින් හදුන්වා දී ඇති සමීකරණ භාවිතා කරයි.ආචාර්ය බී.වී. රාමන් මහතාගේ හා එන්.සී ලහිරි මහතාගේ මෙන්ම ක්‍රිෂ්ණමුර්ති මහතාගේ අයනාංශ සමීකරණ භාවිතා කරන අතර මා දන්නේ ලහිරි අයනාංශ සමීකරණය පමණි. මෙම ලිපි පෙල් මීට පෙර දැක්වූ මූලික අංකනයන් සමඟ සැලකූ විට
     උපන් වර්ෂය = y   ,    මාසය = m     හා දිනය = d   ලෙසත්
      උපන් වේලාව(පැය 24 ඔරලෝසු වේලාවෙන්)  පැය = h     විනාඩි = mt
      උපන් ස්ථානයේ අක්‍ෂාංශ  අංශක = latdeg          කලා = latmt     (උතුරු/දකුණු)
      උපන් ස්ථානයේ දේශාංශ  අංශක =logndeg           කලා = lognmt     (නැගෙනහිර/බටහිර)


  මෙම දත්ත උපයෝගී කොටගෙන ජූලියන් දින අංකය   අගය හා ඒ ඇසුරින් දවස සොයන හැටි මෙම ලිපිපෙලේ පලමු ලිපියෙන් දැක්වීය. b6  අගය 
                                           b6 = (j - 694025 + h6) /36525
                                  මෙහි  h6 = (h + mt / 60 - 17.5) / 24      සමීකරනයෙන් ගත් විට 

1) ලහිරි අයනාංශය = ayanamsa = 22.460148 + (1.3960042) x b6 + {(3.08 x e -4(b6) x (b6) )}

 2)  obliquity = 23.452294 - (0.0130125 x b6 )  (පෘථිවියේ ඇලය දළ වශයෙන් අංශක 23.44කි).

 3) නක්‍ෂත්‍ර(තාරකා) කාලය = ST =  Sideral Time = 24 x { [(x1 + x2 + x3)/24] හි දශම අගය }
        (x1 + x2 + x3)/24  = 21.5438 ලෙස ලැබුණි නම්  [(x1 + x2 + x3)/24] හි දශම අගය  = 0.5438 වේ

මෙහි
   x1 = 24 x {[0.2769 + (100.00214] x b6 ] හි දශම අගය }
   x2 = [h + (mt/60) - 17.33] + 12.00
   x3 = [logndeg + (lognmt/60)] / 15
    නැගෙනහිර දේශාංශ සදහා x3 (ධනx3) අගයද බටහිර දේශාංශ සදහා -x3( සෘණx3)  අගයද ගත යුතුය. 
 තාරකා කාලය(ST) < 0 නම් ST අගයට 24 ක් එකතු කර ලැබෙන අගය තාරකා කාලය(ST) ලෙස ගත යුතුය.
උදා  ST = -0.5 ලැබුනි නම් ST ලෙස ගන්නේ 23.5 අගයයි. 

 මෙම ST අගයෙන් ගනනය කර ගන්නා 


               a0 =ST
               c0 = latdeg + (latmt/60)    ( උතුරු අක්‍ෂාංශ සදහා c0 අගයද දකුණු අක්‍ෂාංශ සදහා -c0  අගයද ගත යුතුය) 
               d0 = Obliquity  
                               අගයන් පහත දැක්වෙන ත්‍රිකෝණමිතක ශ්‍රිතයට ආදේශවේ.

  ඉහත   a0,c0,d0 අගයන් අනුව ගොඩ නැගී ඇති මෙම ත්‍රිකෝණමිතික සූත්‍රය ඝණ ජ්‍යාමිතිය ඇසුරින් ජන්මියා උපන් පෘථවි ලක්‍ෂයට අදාල දෛශිකය ඇසුරින් ගොඩ නැගී ඇත.


 ඉහත  a0,c0,d0, වැනි කෝණ අගයන් sin,cos tan  වැනි ත්‍රිකෝණමිතික ශ්‍රිත තුල ක්‍රියාත්මක කරඇත්තේ රේඩියන් වලට හැරවීමෙනි.වැඩසටහනේ z1 =3.14159265359     ,       z2 =z1/180         අගයන් මගින් මෙම අංශක හා රේඩියන් පරිවර්තනය සිදු කොට ඇත.

                      
    *  a0 , c0 දෙකම එකවර ශුන්‍යය (0) වන විට G = 90.0 වේ. 

  *  1) G<0  නම් පමනක් පලමුව G අගයට 180 ක් එකතු කර ගත යුතුය.
      2) (b0 -G )>75 නම් පමනක් දෙවනුව   G අගයට තවත් 180 ක් එකතු කර ගත යුතුය.
 ඉහත 1) හා 2) අවස්ථාවලින් පස අවසානයේ ලැබෙන G අගය  GF නම්
   ලග්නයේ මධ්‍ය කේන්ද්‍රය CP = GF - ayanamsa
   
       * CP< 0   නම් CP අගයට 360 ක් එකතු කර එම අගය CP අගය ලෙස ගත යුතුය
       * CP>360 නම් CP  අගයෙන් 360ක් අඩු කොට එම අගය CP අගය ලෙස ගත යුතුය.  

          ලග්න අංකය = { (අවසන්CP අගය) /30 }හි නිඛිල අගය  + 1   

           ලග්න අංකය 1,2,3,...12  වීම අනුව මේෂ,වෘෂභ,මිථුන,.....,මීන ලග්න ලැබේ.  

  මෙම ගණිතය උපයෝගී කරගෙන යම් වේලාවක උපදින අයකුගේ ලග්න ස්ථුථය හා ලග්නය ගනනය කිරීමට සකසන ලද   C වැඩසටහනක් පහත දක්වා ඇති අතර එම වැඩසටහනේ කම්පයිල් ඔවුට් පුට් වින්ඩෝව භාගත කර ගැනීමට පහසුවද  පහලින් දක්වා ඇත.එය භාගත කර ඔබගේ උපන් වේලාවට ලැබෙන ලග්නය ගනනය කර බලන්න.

   * * වෙනත් ග්‍රහයන්ගේ ගුරුත්වාකර්ෂණ බලපෑම හා අයනාංශයට එකතු විය යුතු දෝෂ නිමාන කොටස් ඇතුල් කොට නැතත් මෙමගින් ඔබේ උපන්  වේලාවට අදල ලග්න ස්ඵුථය හා ලග්නය ඉතා නිවැරදිව ලැබේ.ඔබ ලග්න මායිමකදී ඉපදී ඇති විට මින් ලැබෙන ලග්නය ඔබ භාවිතා කරන ලග්නයට ආසන්න ලග්නය විය හැක.

                            උපන් ලග්නය සෙවීමේ මෙම වැඩසටහන භාගත කරගැනීමට මෙතනින් යන්න(Download ASCENDIN File).

----------------------------------------------------------------------------------------------



#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,G;
int ret = 0, page =1, line, r3[13], s3[13], varga[13][7];
double plnt[26];
char *ras[] = {"MESHA","VRUSHABA","MITHUNA","KATAKA","SINHA","KANNYA","THULA","VHUSCHIKA","DHANU","MAKARA","KUMBA","MEENA"};
long int LG;

long int jd(d,m,y)
long int d,m,y;
{
 long int j,a9,y9,m9,a1,b1,c1,d1,JDN;
 float b;

  a9 = (14-m)/12;
  y9 = y + 4800 - a9 ;
  m9 = m + 12*a9 -3 ;

  a1= (153*m9 +2)/5;
  b1 = y9/4;
  c1 = y9/100;
  d1 = y9/400;

  JDN = d + a1 + 365*y9 + b1 - c1 + d1 - 32045 ;

  j = JDN - 1720995 ;

 return(j);
 }


double fract(x)
double x;
{
    long int i;
    double y;

    i = x;
    y = x - i;
    return y;
}

ayan()
{
       plnt[0] = 22.460148 + 1.396042*b6 + 3.08e-4*b6*b6;
return 0;
}

bhav()
{
   double a0,b0,c0;
   int i;
   double bhavspl();

   aya = plnt[0];
   obliq = 23.452294 - 0.0130125 * b6;
   a0 = 24 * fract(0.2769 + 100.00214 * b6);
   b0 = h6 * 24 + 12;
   c0 = longt / 15;
   sidtime = 24 * fract( (a0+b0+c0) / 24);
   if (sidtime < 0)
       sidtime += 24.0;

   G = bhavspl(sidtime,lat);
   LG = G/30;

  printf("Ayanamsa        : %7.2lf\n", plnt[0]);
  printf("obliquity       : %7.2lf\n", obliq);
  printf("sideral Time    : %7.2lf\n\n", sidtime);
  printf("Ascendant Longitude    : %7.2lf \n",G);
  printf("Lagnaya     : %s \n",ras[LG]);
return 0;
}


double bhavspl(a0, c0)
double a0, c0;
{
  double r0, w0, b0, g0;

  r0 = aya;
  w0 = obliq * z2;
  b0 = a0 *15 + 90.0;
  if (b0 >= 360.0)
      b0 -= 360.0;
  a0 *= z1 /12;
  c0 *= z2;
  if (a0 == 0.0 && c0 == 0.0)
      return 90.0;
  g0 = atan(-cos(a0)/(sin(c0) * sin(w0)/cos(c0)+sin(a0)*cos(w0)));
  g0 /= z2;
  if (g0 < 0.0)
      g0 += 180.0;
  if (b0 -g0 > 75.0)
      g0 += 180.0;
      g0 -= r0;
  if (g0 < 0.0)
      g0 += 360.0;
  if (g0 > 360.0)
      g0 -= 360.0;
      return g0;
}


main()
{
long int d,m,y,j,h,mt,i ;
int latdeg, latmt, longdeg, longmt,an,bn;
double fract(), planet(),aa1,bb1 ;
char ns,ew;

ps = 0.0;
 pt = 0.0;
 z1 = 3.14159265359;
 z2 = z1/180;
 s1 = 99.99826;

printf("          PROGRAMMED BY :B.D. CHANDANA PRABATH\n");

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);
 printf("\n\n\n\nEnter Birth city Latitude(latdeg.latmt n/s:)  Ex :- Kalutara=6.22 n  \n ");
 scanf("%d.%d %c", &latdeg, &latmt, &ns);
 printf("\n\n\n\nEnter Birth city Longitude(longdeg.longmt e/w:)  Ex:- Kalutara=79.58 e  \n ");
 scanf("%d.%d %c", &longdeg, &longmt, &ew);
 lat = (double)latdeg + (double)latmt / 60;
 if (ns == 'S' || ns == 's')
 lat = -lat;
 longt = (double)longdeg + (double)longmt / 60;
 if (ew == 'W' || ew == 'w')
 longt = -longt;

 j = jd(d,m,y);
 h6 = ((double)h + (double)mt / 60 - 17.5) / 24;
 b6 = (j - 694025 + h6) /36525;
 j = (j+4)%7;
 ayan();
 bhav();
 getch();
 return 0;
}