เคยมีผู้อ่านท่านหนึ่งสอบถามเกี่ยวกับการคำนวณสมผุสดวงแบบไทยที่ตัด อยนางศแบบลาหิรี (แบบที่เราเรียกกันจนชินว่า "ปฏิทินอาจารย์เทพย์" ตามชื่อของอาจารย์ เทพย์ สาริกบุตร ซึ่งเป็นผู้จัดทำหนังสือปฏิทินโหราศาสตร์ไทยระบบนี้เผยแพร่อย่างกว้างขวาง)
จะมีวิธีการอย่างไรบ้าง ซึ่งผมก็ได้ตอบท่านไปทางอีเมล์ไปแล้ว และเพื่อให้เป็นประโยชน์ต่อท่านอื่นๆ ด้วย จึงขอนำคำตอบในอีเมล์ดังกล่าวมาเรียบเรียงเป็นบทความเผยแพร่ (เป็นการเขียนโปรแกรมด้วย Delphi ต้องขออภัยผู้ถนัดภาษาโปรแกรมอื่นที่ต้องใช้ทักษะในการดัดแปลงซอร์สโค้ดเองเช่นเคย) ดังนี้
ในชุดตัวอน่างโปรแกรม RojnDelphiSWE.zip ที่เปิดให้ดาวน์โหลด จะมีให้เลือกว่าจะผูกดวงแบบสายนะหรือนิรายนะ แต่ถ้าดูในซอร์สโค้ดเองจะหายากสักนิด เพราะผมไม่ค่อยได้คอมเมนต์อะไรไว้ โดยหลักคือ ตามปกติเวลาเราคำนวณสมผุสดาวในโหราศาสตร์ยูเรเนียนซึ่งเป็นระบบสายนะ จะเขียนโค้ดออกมาในทำนองนี้
iflag := seflg_speed;
for i := SE_SUN to SE_POSEIDON do if (i<=SE_TRUE_NODE) or (i>=SE_CUPIDO) then
begin
rflag := swe_calc(tjdet, i, iflag, xx[0], serr);
....
....
end;
เมื่อจะคำนวณเป็นสมผุสนิรายนะแบบลาหิรี จะเปลี่ยนบรรทัดแรกเป็น
iflag := seflg_speed+SEFLG_SIDEREAL;
swe_set_sid_mode(SE_SIDM_LAHIRI, 0, 0);
(ส่วนจะคำนวณถึงแค่มฤตยูตามแนวคิดแบบไทยๆ หรือเติมเนปจูนพลูโต ก็แก้โค้ดบรรทัดที่สองเอานะครับ ถ้าไม่แก้ก็จะได้ดาวทิพย์ยูเรเนียนมาประดับดวงไทยครบชุดเลย)
ถ้าจะคำนวณแต่ค่าอยนางศเฉยๆ ก็ใช้ว่า
swe_set_sid_mode(SE_SIDM_LAHIRI, 0, 0);
swe_get_ayanams(tjdet);
ทั้งนี้ พึงทราบว่า โหราศาสตร์ระบบนิรายนะนั้น ยังมีความเห็นแตกต่างกันว่า จุดเมษควรเริ่มต้น ณ ที่ใด ค่าอยนางศ หรือ ค่าความแตกต่างระหว่างจุดเมษของระบบนิรายนะกับระบบสายนะ ควรเป็นเท่าใด ต่างอาจารย์ต่างก็กำหนดทฤษฎีและหลักการคำนวณของตนเอง แต่นักโหราศาสตร์ไทยที่ผูกดวงแบบดาราศาสตร์ตัดอยนางศนั้น จะใช้อยนางศแบบลาหิรีครับ (รายละเอียดศึกษาได้จากบทความของ พล.อ.ต. ม.ร.ว. สุกษม เกษมสันต์ ในคอลัมน์ บทความสมทบ) ซึ่ง Swiss Ephemeris ได้กำหนดค่าตัวแปรไว้เอาใจผู้ใช้งานระบบนิรายนะแทบจะทุกค่ายไว้แล้ว ค่าที่ใช้กำหนดชนิดอยนางศทั้งหมด ได้แก่
//sidereal modes, for swe_set_sid_mode()
SE_SIDM_FAGAN_BRADLEY : Longint = 0;
SE_SIDM_LAHIRI : Longint = 1;
SE_SIDM_DELUCE : Longint = 2;
SE_SIDM_RAMAN : Longint = 3;
SE_SIDM_USHASHASHI : Longint = 4;
SE_SIDM_KRISHNAMURTI : Longint = 5;
SE_SIDM_DJWHAL_KHUL : Longint = 6;
SE_SIDM_YUKTESHWAR : Longint = 7;
SE_SIDM_JN_BHASIN : Longint = 8;
SE_SIDM_BABYL_KUGLER1 : Longint = 9;
SE_SIDM_BABYL_KUGLER2 : Longint = 10;
SE_SIDM_BABYL_KUGLER3 : Longint = 11;
SE_SIDM_BABYL_HUBER : Longint = 12;
SE_SIDM_BABYL_ETPSC : Longint = 13;
SE_SIDM_ALDEBARAN_15TAU : Longint = 14;
SE_SIDM_HIPPARCHOS : Longint = 15;
SE_SIDM_SASSANIAN : Longint = 16;
SE_SIDM_GALCENT_0SAG : Longint = 17;
SE_SIDM_J2000 : Longint = 18;
SE_SIDM_J1900 : Longint = 19;
SE_SIDM_B1950 : Longint = 20;
SE_SIDM_USER : Longint = 255;
ถ้าไม่มีการเลือกชนิดอยนางศด้วยคำสั่ง swe_set_sid_mode จะคำนวณอยนางศแบบ Fagan-Bradley นะครับ ถ้าเขียนโปรแกรมออกมาแล้วค่าอยนางศหรือค่าสมผุสคลาดเคลื่อนจาก "ปฏิทินอาจารย์เทพย์" ประมาณ 1 องศาละก็ แสดงว่าลืมกำหนดโหมดของอยนางศแน่ๆ ครับ ลอง Debug ดูให้ดีๆ นะครับ
เนื่องจากดาวเกตุไทยของเรายังไม่เคยได้ "โกอินเตอร์" กับเขาสักที เมื่อใช้ Swiss Ephemeris ล้วนๆ คำนวณดวงไทยก็จะขาดดาวนี้ไป เพื่อให้ครบเครื่อง จึงขอเพิ่มเติมสูตรคำนวณเกตุไทยดังนี้
procedure ketucal(day : double; var ketu : double);
var n : double;
begin
n := day-0.050730381-588465;
ketu := 360-frac(n*0.530191458/360)*360-54.1;
While Ketu<0 do Ketu := 360+Ketu;
While Ketu>=360 do Ketu := 360-Ketu;
end;
จำนวนวันที่ใช้เป็นจำนวนวันจูเลียนซึ่งผมก็ยังไม่แน่ใจว่าควรจะใช้จำนวนวันตามเวลา Universal Time (ค่าตัวแปร tjdut) หรือจำนวนวันที่ปรับค่า Ephemeris Time (ค่าตัวแปร tjdet) แต่ค่าที่คำนวณได้ก็ไม่ต่างกันมาก ลองศึกษาเปรียบเทียบดูนะครับ
สินค้าที่อาจเกี่ยวข้องจาก ร้านค้าออนไลน์