জন্মচন্দ্রের রাশি জানার জন্য প্রধানত চন্দ্রের নিরয়ণ longitude দরকার। কিন্তু জন্মলগ্ন ও ১২ ভাব নির্ণয়ের জন্য exact local time, অক্ষাংশ, দ্রাঘিমা এবং timezone একসঙ্গে প্রয়োজন। কারণ লগ্ন হলো জন্মমুহূর্তে স্থানীয় পূর্ব দিগন্তে ecliptic-এর যে বিন্দু উঠছিল; কয়েক মিনিট সময়ের পরিবর্তনেও সেই বিন্দু এগিয়ে যায়।
রাশি চক্র ও ভাব চালিত চক্র এক নয়
রাশি চক্র zodiac-এর স্থির division। মেষ থেকে মীন—প্রতিটি রাশি ৩০° এবং মোট ৩৬০°। কোনো গ্রহের নিরয়ণ longitude তার রাশি নির্ধারণ করে।
ভাব হলো observer-এর স্থান ও সময়ভিত্তিক division। ১ম ভাবের কেন্দ্র লগ্ন, ১০ম ভাবের কেন্দ্র MC বা মধ্যলগ্ন। নির্বাচিত house system এই principal angles-এর মধ্যবর্তী arc কীভাবে ভাগ করবে তা নির্ধারণ করে।
| বিষয় | রাশি চক্র | ভাব চালিত চক্র |
|---|---|---|
| ভাগের ভিত্তি | ১২টি সমান ৩০° রাশি | স্থানীয় horizon, meridian ও house system |
| Location-এর প্রভাব | Geocentric graha longitude-এ সাধারণত নেই | অক্ষাংশ ও দ্রাঘিমা সরাসরি প্রভাব ফেলে |
| Birth time-এর প্রভাব | গ্রহের ধীর পরিবর্তন | লগ্ন ও cusp দ্রুত বদলায় |
| গ্রহের পরিচয় | রাশি ও degree | কোন দুটি sandhi-এর মধ্যে গ্রহটি আছে |
| Planet longitude | মূল position | অপরিবর্তিত; শুধু house assignment বদলায় |
কোন inputs অপরিহার্য?
একটি reproducible Bhava Chalita calculation-এর জন্য নিচের তথ্য দরকার:
- জন্মের civil date;
- ঘণ্টা, মিনিট এবং সম্ভব হলে second-সহ জন্মসময়;
- জন্মস্থান বা latitude–longitude;
- সেই তারিখে প্রযোজ্য timezone ও DST rule;
- calendar label—Gregorian, Julian বা অন্য কিছু;
- planetary engine ও ephemeris version;
- ayanāṃśa বা traditional ayana model;
- house system—এই প্রকল্পে classical Śrīpati;
- boundary equality policy—sandhi-তে ঠিক থাকা planet কোন ভাবে যাবে।
জন্মসময় জানা না থাকলে শুধু একটি default noon বা sunrise বসিয়ে “সঠিক লগ্ন” প্রকাশ করা উচিত নয়। সে ক্ষেত্রে রাশি ও গ্রহস্ফুট দেখানো যেতে পারে, কিন্তু লগ্ন ও ভাবের পাশে “জন্মসময় প্রয়োজন” বলা অধিক সৎ।
লগ্ন কীভাবে নির্ণীত হয়?
Local sidereal time থেকে সেই মুহূর্তে স্থানীয় meridian-এর celestial orientation নির্ণয় করা হয়। এরপর observer-এর latitude এবং ecliptic obliquity ব্যবহার করে পূর্ব দিগন্তের সঙ্গে ecliptic-এর intersection বের করা হয়। এটিই Sayana Ascendant বা সায়ন লগ্ন।
UT + longitude → Local Sidereal Time / ARMC
ARMC + latitude + obliquity → Sayana Ascendant
Sayana Ascendant − ayanāṃśa → Nirayana Lagna
Ascendant zodiac-এর ওপর সমান গতিতে চলে না। পৃথিবী প্রায় এক sidereal day-এ একবার ঘুরলেও ecliptic-এর কৌণিক projection, latitude এবং obliquity-এর কারণে রাশিগুলোর rising duration সমান হয় না। তাই “প্রতি দুই ঘণ্টায় ঠিক এক রাশি”—এটি শুধু একটি খুব মোটামুটি ধারণা, calculation rule নয়।
MC এবং চারটি প্রধান কেন্দ্র
MC বা Midheaven হলো local meridian-এর সঙ্গে ecliptic-এর উপরের intersection। এটি ১০ম ভাবমধ্য হিসেবে ব্যবহৃত হয়। বিপরীত বিন্দু IC বা Nadir ৪র্থ ভাবমধ্য। Ascendant-এর বিপরীত Descendant ৭ম ভাবমধ্য।
| ভাব | Principal angle | প্রকল্পের সূত্র |
|---|---|---|
| ১ম | Ascendant / Lagna | Nirayana Lagna |
| ৪র্থ | IC / Nadir | Nirayana MC + 180° |
| ৭ম | Descendant | Nirayana Lagna + 180° |
| ১০ম | MC / Madhyalagna | Nirayana MC |
MC সব সময় Lagna থেকে ঠিক ৯০° দূরে নয়। এই কারণেই Śrīpati quadrants সমান ৯০° ধরে না নিয়ে বাস্তব Lagna–IC–Descendant–MC arc আলাদাভাবে তিন ভাগ করে।
সায়ন থেকে নিরয়ণ লগ্ন ও MC
Tropical বা সায়ন longitude vernal equinox-এর চলমান অবস্থানকে zero ধরে। Nirayana বা sidereal longitude-এর জন্য নির্বাচিত ayanāṃśa বাদ দেওয়া হয়:
Nirayana MC = Normalize(Sayana MC − Ayanāṃśa)
এই প্রকল্পের বর্তমান traditional LagnaEngine.php Surya Siddhanta ayanāṃśa formula এবং ২৪° obliquity ব্যবহার করে। Drik mode-এ Swiss Ephemeris ও Lahiri ayanāṃśa ব্যবহার করা হলে planet longitude, Lagna এবং cusps—সব একই sidereal model-এ নিতে হবে।
শ্রীপতি পদ্ধতিতে ১২ ভাবমধ্য
বর্তমান engine classical Śrīpati quadrant-trisection পদ্ধতি ব্যবহার করে। চারটি principal angle থেকে তৈরি প্রতিটি zodiacal arc তিন সমান ভাগে ভাগ করা হয়:
- Lagna → IC arc তিন ভাগ: ১ম, ২য়, ৩য়; শেষে ৪র্থ;
- IC → Descendant arc তিন ভাগ: ৪র্থ, ৫ম, ৬ষ্ঠ; শেষে ৭ম;
- Descendant → MC arc তিন ভাগ: ৭ম, ৮ম, ৯ম; শেষে ১০ম;
- MC → Lagna arc তিন ভাগ: ১০ম, ১১শ, ১২শ; শেষে আবার ১ম।
Bhava₂ = Bhava₁ + Arc(1→4) / 3
Bhava₃ = Bhava₁ + 2 × Arc(1→4) / 3
অন্য তিন quadrant-এও একই পদ্ধতি প্রয়োগ হয়। প্রতিটি addition-এর পরে longitude ০°–৩৬০°-এ normalize করতে হয়, নইলে মীন থেকে মেষ অতিক্রমকারী arc ভুল হবে।
ভাবমধ্য ও ভাবসন্ধি
ভাবমধ্য একটি ভাবের central cusp। ভাবসন্ধি দুটি পাশের ভাবমধ্যের মাঝের boundary। বর্তমান engine adjacent cusp arc-এর midpoint নিয়ে sandhi তৈরি করে।
= Normalize(BhavaMadhya(i)
+ Normalize(BhavaMadhya(i+1) − BhavaMadhya(i)) / 2)
একটি ভাবের start sandhi হলো আগের ভাবের end sandhi; তার end sandhi হলো বর্তমান ও পরবর্তী cusp-এর midpoint। এতে ১২টি ভাব একসঙ্গে সম্পূর্ণ ৩৬০° cover করে, overlap বা gap থাকার কথা নয়।
| ভাব | পূর্ব সন্ধি | ভাবমধ্য | পর সন্ধি | অবস্থিত গ্রহ |
|---|---|---|---|---|
| ১ম ভাব | ১২–১ boundary | Nirayana Lagna | ১–২ boundary | Boundary test থেকে |
| ৪র্থ ভাব | ৩–৪ boundary | Nirayana IC | ৪–৫ boundary | Boundary test থেকে |
| ৭ম ভাব | ৬–৭ boundary | Nirayana Descendant | ৭–৮ boundary | Boundary test থেকে |
| ১০ম ভাব | ৯–১০ boundary | Nirayana MC | ১০–১১ boundary | Boundary test থেকে |
গ্রহ কোন ভাবে অবস্থান করবে?
প্রতিটি planet-এর normalized নিরয়ণ sphuta নিয়ে ১২টি wrapped interval-এর মধ্যে পরীক্ষা করা হয়:
Offset = Normalize(PlanetLongitude − StartSandhi)
Planet belongs to Bhava যদি 0 ≤ Offset < Span
অর্ধ-খোলা interval [start, end) ব্যবহারে sandhi-তে ঠিক থাকা কোনো planet দুই ভাবে duplicate হয় না। বর্তমান policy অনুযায়ী end sandhi-তে থাকা planet পরবর্তী ভাবে যায়। এই convention table footer বা methodology page-এ উল্লেখ করা ভালো।
গ্রহের dist_from_madhya −১৮০° থেকে +১৮০° signed angular difference হিসেবে রাখা যায়। এতে planet cusp-এর আগে না পরে এবং কত দূরে—তা research view-এ দেখা যায়। Retrograde status আলাদা property; retrograde হওয়ার কারণে house assignment বদলায় না।
House system ঘোষণা করা কেন জরুরি?
Śrīpati একমাত্র house system নয়। Equal, Whole Sign, Placidus, Koch, Porphyry, Regiomontanus, Campanusসহ বহু division প্রচলিত। একই জন্মমুহূর্তে Ascendant ও MC একই থাকলেও intermediate cusps এবং planet-house assignment বদলাতে পারে।
| System | মূল ধারণা | প্রকল্পের ব্যবহার |
|---|---|---|
| Whole Sign | লগ্নরাশি সম্পূর্ণ ১ম ভাব; প্রতিটি রাশি একটি ভাব | বর্তমান Bhava Chalita নয় |
| Equal | Ascendant থেকে ১২টি সমান ৩০° ভাব | ঐচ্ছিক comparative mode হতে পারে |
| Śrīpati | চার quadrant-এর প্রত্যেকটি তিন ভাগ | বর্তমান traditional engine |
| Placidus ইত্যাদি | অন্য time/space-based division | Drik comparative option হলে স্পষ্ট label আবশ্যক |
Swiss Ephemeris-এর swe_houses_ex ও swe_houses_ex2 functions house-system code গ্রহণ করে; S Śrīpati। তবে built-in function ও custom classical implementation-এর cusp বা planet-position algorithm versionভেদে bit-for-bit এক নাও হতে পারে। একই report-এ দুই implementation মিশিয়ে না দিয়ে test cases দিয়ে নির্বাচিত mode pin করুন।
Timezone ও জন্মসময়ের ভুল
বর্তমান PHP prototype-এ $hoursDecimal - 5.5 দিয়ে IST থেকে UT করা হয়েছে। Kolkata-এর modern standard-time input-এর জন্য এটি নির্দিষ্ট context-এ কাজ করতে পারে; Dhaka, New York বা historical dates-এর জন্য এটি সঠিক নয়।
Production flow হওয়া উচিত:
- User-entered wall time-কে
DateTimeKind.Unspecifiedহিসেবে নিন; - নির্বাচিত city-এর
TimeZoneInfoব্যবহার করুন; - DST-এর invalid বা ambiguous local time আগে পরীক্ষা করুন;
- সঠিক UTC instant তৈরি করুন;
- UTC থেকে Julian Day UT ও sidereal time গণনা করুন;
- Output-এ timezone ID এবং সেই instant-এর UTC offset দেখান।
DateTime wallTime = DateTime.SpecifyKind(input, DateTimeKind.Unspecified);
TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
if (zone.IsInvalidTime(wallTime))
throw new ArgumentException("DST-এর কারণে এই স্থানীয় সময়টি ঘটেনি।");
if (zone.IsAmbiguousTime(wallTime))
throw new ArgumentException("এই সময়টি দুইবার ঘটেছে; সঠিক UTC offset নির্বাচন করুন।");
DateTime utc = TimeZoneInfo.ConvertTimeToUtc(wallTime, zone);
Historical birth date-এ modern timezone rule retrospective convention হতে পারে। Location-এর পুরোনো civil-time history অজানা হলে report-এ uncertainty note রাখুন এবং প্রয়োজনে Local Mean Time comparative option দিন।
ConversionTools.aspx-এ ফল কীভাবে দেখাবেন?
User-এর City, Date ও Time input থেকে “৩. জন্মচন্দ্রের রাশি ও রাশি চক্র” section-এর নিচে একটি পৃথক panel যোগ করা যায়:
Nirayana Lagna: ১২৩°৪৫′১২″
Nirayana MC: ৩১°০৮′৪৪″
Ayanāṃśa: ২৪°১১′০২″
House system: Śrīpati · Traditional Surya Siddhanta
এরপর পূর্ণ table:
- ভাবের নাম;
- ভাব আরম্ভ বা পূর্ব সন্ধি;
- ভাবমধ্য বা cusp—DMS এবং Panjika Sphuṭa format;
- ভাব শেষ বা পর সন্ধি;
- অবস্থিত গ্রহসমূহ;
- ঐচ্ছিকভাবে cusp থেকে signed distance।
Rāśi Chakra এবং Bhava Chalita chart পাশাপাশি থাকলে color legend আলাদা রাখুন। Rāśi cell-এ গ্রহের longitude, Bhava table-এ house number দেখান—দুটিকে দেখে যেন গ্রহের রাশি বদলে গেছে মনে না হয়।
C# implementation policy
PHP port করার সময় calculation, formatting ও UI আলাদা class-এ রাখলে test করা সহজ হবে:
| Component | দায়িত্ব |
|---|---|
BirthMomentResolver |
Local input, timezone, DST ও UTC instant |
LagnaCalculator |
ARMC, Sayana/Nirayana Lagna, MC ও ayanāṃśa |
SripatiBhavaCalculator |
Principal angles, ১২ madhya ও ১২ sandhi |
BhavaPlanetMapper |
Wrapped interval-এ graha assignment |
BhavaReportRenderer |
HTML table, DMS, Bengali digits ও chart legend |
Model-এ raw double degree এবং formatted string এক field-এ রাখবেন না। Calculation result numeric থাকবে; renderer culture ও language অনুযায়ী DMS বা Panjika format করবে। এতে ভবিষ্যতে Assamese বা English language file যোগ করা সহজ হবে।
Drik alternative-এ Swiss Ephemeris ব্যবহার করলে sequence:
SetSiderealMode(Lahiri);
cusps, ascmc = HousesEx2(julianDayUt, SiderealFlag,
latitude, longitude, 'S');
nirayanaLagna = ascmc[0];
nirayanaMc = ascmc[1];
Exact C# wrapper signature যাচাই করতে হবে। Swiss documentation অনুযায়ী input Julian Day অবশ্যই UT এবং longitude east-positive, west-negative; latitude north-positive, south-negative।
Validation checklist
Bhava code-এ normal example-এর চেয়ে wrap ও boundary tests বেশি গুরুত্বপূর্ণ:
- ১ম ও ৭ম ভাবমধ্য ঠিক ১৮০° বিপরীত;
- ৪র্থ ও ১০ম ভাবমধ্য ঠিক ১৮০° বিপরীত;
- সব quadrant arc-এর তিন ভাগ মূল endpoint-এ পৌঁছায়;
- ১২ sandhi-তে কোনো gap বা overlap নেই;
- ৩৫৯° থেকে ১° অতিক্রমকারী interval সঠিক;
- planet ঠিক start sandhi-তে একবার assignment পায়;
- planet ঠিক end sandhi-তে পরবর্তী ভাবে যায়;
- প্রতিটি input planet একবার এবং মাত্র একবার map হয়;
- Traditional ayanāṃśa ও Lahiri mode mix হয় না;
- Kolkata, Dhaka ও New York একই UTC instant test;
- New York DST invalid ও ambiguous time;
- পশ্চিম longitude ও দক্ষিণ latitude sign test;
- PHP ও C# port-এর golden cases;
- High-latitude input-এ finite result অথবা পরিষ্কার error;
- এক মিনিট birth-time পরিবর্তনে expected directional change।
Golden test data-তে শুধু formatted table নয়, raw ARMC, Sayana Lagna, ayanāṃśa, Nirayana Lagna, MC, ১২ madhya ও ১২ sandhi সংরক্ষণ করুন। এতে ভুলটি time conversion, Lagna formula না planet mapping—তা দ্রুত বোঝা যায়।
ব্যবহারের সীমা ও সতর্কতা
Birth record-এর সময় rounded, estimated বা family memory-ভিত্তিক হলে Lagna ও cusp-এর uncertainty বাড়ে। Hospital clock, timezone record ও daylight-saving status-ও ভুল হতে পারে। তাই “সময় আনুমানিক” option থাকলে report-এ সেটি প্রকাশ করা উচিত।
Bhava Chalita একটি জ্যোতিষীয় interpretation framework; এটি কোনো ব্যক্তির চরিত্র, স্বাস্থ্য, ভবিষ্যৎ বা সিদ্ধান্তের বৈজ্ঞানিক নিশ্চয়তা দেয় না। Application-এর কাজ হলো ঘোষিত সূত্রে chart reproducibly গণনা করা—interpretive claim-কে calculation fact হিসেবে দেখানো নয়।
উপসংহার
রাশি চক্র এবং ভাব চালিত চক্র একই chart-এর দুটি ভিন্ন স্তর। রাশি zodiac-এর সমান ৩০° বিভাগ; ভাব observer-এর জন্মসময় ও স্থান থেকে নির্মিত house division। Śrīpati পদ্ধতিতে Lagna, IC, Descendant ও MC—এই চার কেন্দ্রের প্রতিটি arc তিন ভাগ করে ১২ ভাবমধ্য এবং তাদের midpoint থেকে ১২ sandhi তৈরি হয়।
গ্রহের nirayana longitude অপরিবর্তিত থাকে; sandhi interval নির্ধারণ করে গ্রহটি কোন ভাবে পড়বে। তাই ভাব বদলানো মানে রাশি বা গ্রহস্ফুট বদলানো নয়। Ayanāṃśa, house system, timezone ও boundary convention প্রকাশ না করলে একই input থেকে ভিন্ন chart-এর কারণ যাচাই করা যায় না।
এই প্রকল্পের ConversionTools-এ Traditional Surya Siddhanta Śrīpati mode এবং চাইলে Drik/Lahiri comparative mode আলাদাভাবে দেখানো যেতে পারে। সবচেয়ে গুরুত্বপূর্ণ production correction হলো fixed IST বাদ দিয়ে selected location-এর historical timezone rule থেকে UTC instant তৈরি করা। তবেই Kolkata, Dhaka, New York এবং অন্য সব শহরের ফল একই architecture-এ নির্ভরযোগ্য থাকবে।
তথ্যসূত্র ও আরও পাঠ
- Astrodienst—Swiss Ephemeris Programmer’s Documentation;
swe_houses,swe_houses_ex,swe_houses_ex2এবং house-system codes. - Swiss Ephemeris Programmer’s Manual, version 2.10.
- Astrodienst—Swiss Ephemeris official documentation and downloads.
- Śrīpati, Siddhāntaśekhara; ভারতীয় জ্যোতির্বিদ্যা ও গোলাধ্যায়ের ঐতিহাসিক প্রেক্ষাপট।
- সূর্য সিদ্ধান্ত পঞ্জিকা প্রকল্পের
LagnaEngine.php; Surya Siddhanta ayanāṃśa, ২৪° obliquity, Śrīpati quadrant trisection, sandhi এবং graha-to-bhava mapping implementation. - সূর্য সিদ্ধান্ত পঞ্জিকা প্রকল্পের ConversionTools.aspx, Bhava Chalita table এবং multilingual report design notes.
মন্তব্য, আলোচনা ও প্রশ্ন