Wednesday, November 2, 2011

Mathematical Background of computer astrology - part 1

 Julian Day Number
 කාලය සම්බන්ධ ගනනය කිරීම් වලදී පරිගනක වැඩසටහන් ක්‍රියාත්මක වීම ජූලියන් දිනය නම්වූ මූලික සංකල්පය මත ගොඩ නැංවී ඇත.

  අන්තර් ජාතික අර්ථ දැක්වීම අනුව  "ජූලියන් දින අංකය" අර්ථ දක්වා ඇත්තේ කි.පූ 4713 ජනවාරි 1 දින ග්‍රිනිච් මධ්‍යාහ්න දවල් 12.00 සිට ඇති දින ගනනින්ය.
 
  ඒ අනුව කි.පූ 4801 මාර්තු 1 ග්‍රිනිච් 12.00 වේලාවේ සිට පසුවට ඕනෑම කාලයක් සදහා වලංගු වන පරිදි පහත දැක්වෙන සමීකරණ පද්ධතියෙන් වර්තමානයේ භාවිතාවන සම්මත ජෝර්ජියන් කැලැන්ඩර දිනයක් සදහා  ජූලියන් දින අංකය අර්ථ දැක්වේ.ඒ අනුව

    වර්ෂය = year  
 (කිපූ 1 වර්ෂය සදහා 0 ද ක්‍රි.පූ 2 සදහා -1 ද ...ආදී ලෙස ක්‍රි.පූ 4713 සදහා -4712 ගත යුතුය.)

    මාසය = month
( ජනවාරි =1 , පෙබරවාරි = 2 , .... දෙසැම්බර් =12)

    දිනය = d
   
 ලෙස අංකනය වන විට



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

              

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

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

                        

     සමීකරණ වලින් දැකවේ.

 අමතර යමක් .
 ඉහත JDN  අගයෙන් 1720995 ක් අඩු කල විට ලැබෙන අගය j ලෙස ගත්විට 
                              j = JDN - 1720995
   
      මෙම j අගයට හතරක් එකතු කොට 7 න් බෙදු විට ලැබෙන ශේෂය අනුව දිනයට අදාල දවස කුමක්දැයි සොයා ගත හැක.
   ශේෂය 0  නම් ඉරිදා
               1 නම් සදුදා
               2 නම් අඟහරුවාදා
                       .
                       . 
                       .
                6 නම් සෙනසුරාදා
              



                                      ( උපුටා ගැනීම vikipedia )
                               
   
 උදා - 1979 මාර්තු 16 දිනයේ ජූලියන් දිනය අංකය ගනනය කරමු.

              a = (14 -3)/12 = integer part(0.916666666) = 0 
              y = 1979 +4800 - 0 = 6779
              m = 3 + 12x(0) - 3 = 3+0-3 = 0

             JDN = 16 + (153x0 +2)/5 + (365x6779) + (6779)/4 - (6779)/100 
                          + (6779)/400 - 32045
                   
                     = 16 + integer part (0.4) +  2474335 + integer part (1694.75)  
                                - integer part(67.79) +  integer part (16.9475) -32045
                     = 16 + 0 + 2474335 + 1694 - 67 + 16 -32045
                JDN     = 2443949 

    
             j = 2443949 - 1720995
              j  = 722954

          j+4 = 722958   
 ( j+4) හතෙන් බෙදූ විට ශේෂය 5කි.   ඒ අනුව 1979 මාර්තු 16 දිනය සිකුරාදා දිනයකි.




------------------------------------------------------------------------------------------------------------
 වර්ඩ් එක්සෙල් වැනි කාර්යාල පැකේජ භාවිතයේදී කාලය සම්බන්ධ දත්ත ජූලියන් ඩේට් අගයට අදාලව පෝමැට් ස්වයංක්‍රීයව ලබා දිය හැකි වුවත් ජ්‍යොතිෂ මෘදුකාංග වැනි සංකීර්ණ පරිගණක වැඩසටහනක් සැකසීමේදී වැඩිපුර භාවිතා කෙරෙන පරිගණක භාෂා වැඩසටහන් වලදී ජූලියන් දිනය අගය ගනනය කර ගැනීමට ක්‍රමලේඛනයක් වැඩසටහන සකසන්නා විසින් නිර්මාණය කරගත යුතුය.
   පරිගනක ජ්‍යොතිෂ මෘදුකාංග සැකසීමේදී වැඩසටහන් කරුවන් විවිධ පරිඝනක භාෂා ක්‍රමවේද භාවිතා කරති.කෙසේ වුවත් ජ්‍යොතිෂ මෘදුකාංගයක් සකසන්නා ජ්‍යොතිෂයත් පරිගනක වැඩසටහන් සැකසීමත් යන දෙඅංශයෙන්ම පෘථුල දැනුමක් ඇත්තකු විය යුතුය.පරිගනක වැඩසටහන් ගැන පමනක් දැනගෙන හෝ ජ්‍යොතිෂය පමනක් දැන ගෙන කිසිදිනෙක පරිගනක ජ්‍යොතිෂ මෘදුකාංගයක් උසස් අයුරින් නිර්මාණය කල නොහැක.නිමි ඇදුමක නිෂ්පාදන ක්‍රියාවලිය මෙන් භ්‍රම විභජනයෙන්ද කල නොහැකිය.එනම් ජ්‍යොතිෂ වේදියකු හා පරිගනක වැඩසටහන් කරුවකු එක්වී ජ්‍යොතිෂ මෘදුකාංග නිර්මාණය කිරීමටද නොහැකිය.නමුත් ජ්‍යොතිෂයේ භාවිතා වන ගණිත අවස්ථා හොදින් අධ්‍යනය කරන ජ්‍යොතිෂය මැනවින් නොදත් පරිගනක වැඩසටහන් කරුවෙකුට වුවද සිය දැනුම භාවිතා කොට ජ්‍යොතිෂ මෘදුකාංගයක් සැකසිය හැකිය.
 ------------------------------------------------------------------------------------------------------------    
 පරිගනක භාෂා වැඩසටහන් සකසන්නන් ඒ සදහා භාවිතා කරන ක්‍රමලේඛ රාශියක් ඇත.නක්‍ෂත්‍ර විද්‍යාවේදී වීජීය හා ජ්‍යාමිතික ගණිත සමීකරණ වැඩිපුර භාවිතා වන බැවින්  C,C+,C++,Pascal,java,VB,Python,...          වැනි ක්‍රම ලේඛ වැඩිපුර භාවිතා කෙරේ.ජ්‍යොතිෂ විද්‍යාවේදී ජන්ම කේන්ද්‍ර ගොඩනැගීමේ සිද්ධාන්ත පද්ධතිය පරිගණක ගත කිරීම ඉතා අපහසු කාර්යයකි.පලපුරුදු වැඩසටහන් කරුවෙකුට වුවත් ඒ සදහා විශාල කාලයක් ගතවේ.
    ලංකාවේ බොහෝ දෛවඥයන් ජන්ම කේන්ද්‍ර සෑදීම සිදු කරන්නේ පංචාංග ලිත් වල ඇති දත්ත සටහන් උපයෝගී කොටගෙනය.ඔවුන් ජන්ම වේලාව සැකසීමට අදාල මූලික දත්ත ලබා ගන්නේ පංචාංග ලිත ඇසුරෙනි.උදාහරණයකට යම්කිසි දිනෙක හිරු උදාවන මොහොතට අදාල ලග්න ශේෂය අනුව එදින යම් වේලාවක උපදින ළමයෙකුගේ ජන්ම ලග්නය සැකසීම සලකන්න.මෙහිදී ලග්න ශේෂය බලා ගැනීම සිදු කරන්නේ ලිත අනුසාරයෙනි.ලිත නොතිබුන විට ජන්ම කේන්ද්‍රය සෑදීම පංචාංග ලිත ඇසුරෙන් ගනන් සාදන දෛවඥයකුට අසීරුය.එනම් මෙහිදී දෛවඥයා කේන්ද්‍රය සම්පූර්ණයෙන් සෑදීමක් නොකරයි.ඔහු තම කාර්යය සිදු කරන්නේ අතරමගක සිටය.
   ජ්‍යොතිෂ මෘදුකාංගයකදී කේන්ද්‍රය සෑදීම සම්පූර්ණ ක්‍රියාවලියක් ලෙස සිදු කරයි.ජන්මියාගේ උපන් වේලාව හෝ වෙනත් මොහොතකට අදාළ කාලයට අනුරූප ජූලියන් අගය මූලික කරගෙන එය වැඩසටහන ඔස්සේ පියවරෙන් පියවර ගනනය කිරීම් සිදු කරමින් ජන්ම ලග්නය ග්‍රහ පිහිටීම නැකත දශාව ආදිය ගනනය කරයි.මූලික ආරම්භය ලෙස මෙහිදී ජූලියන් දිනය අංකය ( JDN)හා ඒ ඇසුරෙන් දවස(ඉරිදා,සදුදා.. ආදී )  ගනනය කිරීමට අදාළ ගණිත පසුබිම දක්වා ඇත.වේලාවට අදාළ ජූලියන් අගය ගනනය කරන සූත්‍රයද ඉහත  JD අගයෙන් දක්වා ඇත.ජූලියන් දිනයේ ගණිත පසුබිම වටහා ගත් පසු එම අගයන් ලබා ගන්නා අයුරු වටහා ගැනීම අසීරු නැත.
   ජූලියන් දිනය අංකය හා ඒ ඇසුරින් දිනයට අදාළ දවස ගනනය කිරීමට C  හා Java පරිගණක ක්‍රමලේක ඇසුරින් මා විසින් ගෙඩ නංවන ලද වැඩසටහන් දෙකක් පහත දක්වා ඇත. ඉන් C වැඩසටහනේ කම්පයිල් කරන ලද රනින් වින්ඩෝව භාගත කර ගැනීමේ පහසුවද සලසා ඇත.C හා Java වැඩසටහන් පරිඝනකයට ඇතුල් කරන හැටි හා එම වැඩසටහන් ක්‍රියාත්මක කරන හැටි සරලව හෝ සදහන් නොකලහොත් මෙම ලේඛනය "අන්ධයාට කිරිවල පාට කිව්වා වගේ " තත්ත්වයට පත්වන නිසා C  හා Java Programming  පාඩම් පෙළක යූ ටියුබ් වීඩියෝ ලින්ක්  කීපයක් (ආරම්භක)  ඒ සමඟ දක්වා ඇත.මා දන්නා තරමින්  C හා  Java Programming අන්තර්ජාලයෙන් ඉගෙනීමට ඇති හොදම වීඩියෝ පෙළ ඔබ වෙත දක්වා ඇත.එම පාඩම් පෙලේ සියළු වීඩ්යෝ බැලීම අවශ්‍ය නැත.පලමු පාඩම් හතර පහ බැලූ විට  ක්‍රමලේඛ පරිගනකයට ස්ථාපනය කරන හැටි හා එමගින් සරල වැඩසටහනක් ක්‍රියාත්මක කරන හැටි උගත හැකිය.ජූලියන් දිනය සම්බන්ද වැඩසටහන් දෙක මා සකසා ඇත.ඔබට ඇත්තේ එම වැඩසටහන් ක්‍රියාත්මක කරන හැටි උගෙන මා දුන් වැඩසටහන් වල  ප්‍රතිදානයන් ලබා ගැනීමය.යූ ටියුබ් පාඩම් පෙලේ පලමු වීඩියෝ හතර බැලීම හොදටම ප්‍රමානවත්ය.(මා දක්වා ඇති කීපය වුවත් ප්‍රමාණවත්ය)
   
................................................................................................................................................................
C programe (Save julian.c)

#include<stdio.h>
#include<math.h>
#include<conio.h>
#define True 1   
  
   main()
 {

 char *day1[]= {"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"};


 long int day,month,year,a,y,m,a1,b1,c1,d1,JDN,i,j ;

  printf("\n enter day no  :- \n");
  scanf("%ld",&day);

  printf("\n enter month no  :- \n");
  scanf("%ld",&month);

  printf("\n enter year no  :-  \n");
  scanf("%ld",&year);

  a = (14-month)/12;
  y = year + 4800 - a ;
  m = month + 12*a -3 ;

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

JDN = day + a1 + 365*y + b1 - c1 + d1 - 32045 ;

  printf("\n Julian Day Number is : %ld \n",JDN);

j = JDN - 1720995 ;

  i = (j+4)%7;


  printf("\n the day is : %s \n",day1[i]);
 getch();
 return(0);

}


        මෙම C වැඩසටහන කම්පයිල් කරන ලද රනින් වින්ඩෝව භාගත කර ගැනීමට මෙතනින් යන්න
 
................................................................................................................................................................



Java Program (save julian.java)  

import java.util.Scanner;
public class julian {
public static void main(String args[]){
Scanner chandana = new Scanner(System.in);
int day,month,year,a,y,m,a1,b1,c1,d1,JDN,i,j;
String  day1[]= {"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"};
System.out.println("enter day No :");
day = chandana.nextInt();
System.out.println("enter Month No :");
month = chandana.nextInt();
System.out.println("enter Year No :");
year = chandana.nextInt();
a = (14-month)/12;
 y = year + 4800 - a ;
 m = month + 12*a -3 ;

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

JDN = day + a1 + 365*y + b1 - c1 + d1 - 32045 ;
j = JDN - 1720995 ;

i = (j+4)%7;
System.out.println(" ");
System.out.print("The Julian Day number is " );
System.out.println(JDN);
System.out.print("The day is " );
System.out.println(day1[i]);
}

}
               

....................................................................................................................................................................
 You Tube Videos 
For C
     1) Download and install C in windows
     2) Make Simple C programe and compile and run
      (මෙහි දක්වා ඇති සරල වැඩසටහන ක්‍රියාත්මක කල අයුරින්ම මා විසින් දක්වා ඇති වැඩසටහන  copy and paste  කර julian.c යනුවෙන් Save කොට ක්‍රියාත්මක කර ප්‍රතිධානය ලබා ගන්න.)
      * ඔබ ලිනක්ස් මෙහෙයුම් පද්ධතිය භාවිතා කරන්නේ නම් පහත දැක්වෙන පරිදි එහි ස්වයංක්‍රීයව ස්ථාපනය වී ඇති  C compiler ආධාරයෙන් වැඩසටහන ක්‍රියාත්මක කල හැක.
          1) write my code using text editer and save it (julian.c) on known directory
          2) run terminal and goto directory which saved jullian.c using  "cd" command
              (assume that julian.c saved on desktop directory, type "cd Desktop" on command line)
          3) type " gcc jullian.c" on command line and press enter
          4) type "./a.out " on command line and press enter
          5)Also  you can doing 3,4, steps using similar command "gcc julian.c -o jullian " press enter and then type   "./jullian"  

For Java
         

7 comments:

Anonymous said...

Interesting post as I'm a computer software engineer. will compile your java program and see whether it is working

M. M. Rohana Wasantha said...

Good

jotirathna said...

මම බයේ හිටියේ බ්ලොග් එක කව්රු හරි හැක් කරලා වත්ද කියල!

මුතු said...

කිසිවක් නොතේරෙයි මට.... :(
නැවතත් ලිපියක් කියවීමට ලැබීම නම් සතුටකි. :)

Nihal said...

What is the most accurate software,Jaganatha Hora or Horoscope Explorer Pro?

jhothishalanka said...

@Nihal
මම දන්නා විදියට ජගන්නාත් හෝරා මෘදුකාංගය වඩාත්ම නිවැරදි ජ්‍යොතිෂ මෘදුකාංගයයි.එහි ඇති විශේෂත්වය වන්නේ විවිධ ශාස්ත්‍රීය ක්‍රම වලට අනුරූප අයුරින් වෙන් වෙන් වශයෙන් ගනනය කිරීම් සටහන් ලබා දීමයි. ඔබ දක්වා ඇති අනිත් මෘදුකාංගය ගැන මා දන්නේ නැහැ.

PCNA INOTECH said...

jagannath hora software eken kendrayak sakas karama ena grahasputaya ,panchanga lithe grahasputayata asamanay. ex.. ada dinaye chandrayage sputaya me deke dewidiyakata enne aye... eya niwaradi kara ganne keseda?