সূর্য সিদ্ধান্ত পঞ্জিকা সকল প্রবন্ধ

গ্রহের মধ্যম ও স্পষ্ট অবস্থান: অহর্গণ, বীজ ও দেশান্তর

সূর্য সিদ্ধান্তের অহর্গণ, আবর্তন-ধ্রুবক, বীজ, দেশান্তর, মধ্যম গ্রহ, মন্দ ও শীঘ্র সংশোধন থেকে স্পষ্ট গ্রহ নির্ণয় এবং মেষ সংক্রান্তির বার্ষিক প্রতিবেদন তৈরির ব্যাখ্যা।

পঞ্জিকার “গ্রহস্ফুট” একটি দীর্ঘ calculation chain-এর শেষ ফল। একটি দিন বা মুহূর্তকে প্রথমে epoch থেকে অতিক্রান্ত দিনের সংখ্যায় রূপান্তর করা হয়; তারপর প্রতিটি গ্রহের যুগগত আবর্তন থেকে তার সমবেগে চলা মধ্যম অবস্থান পাওয়া যায়। কিন্তু আকাশে গ্রহের গতি সমবেগে দেখা যায় না। তাই মন্দ ও শীঘ্র সংশোধন প্রয়োগ করে ঐতিহ্যগত স্পষ্ট অবস্থান নির্ণয় করা হয়।

মধ্যম গ্রহ ও স্পষ্ট গ্রহ এক নয়

মধ্যম গ্রহ হলো একটি ideal uniform-motion model-এর ফল। ধরে নেওয়া হয়, গ্রহটি নির্দিষ্ট দীর্ঘ সময়ে নির্দিষ্ট সংখ্যক আবর্তন সম্পন্ন করে এবং প্রতিদিন সমান angular distance অতিক্রম করে। এই অবস্থান calculation-এর অপরিহার্য intermediate value, কিন্তু সরাসরি দৃশ্যমান অবস্থান নয়।

স্পষ্ট গ্রহ বা traditional true position হলো মধ্যম অবস্থানের ওপর সংশ্লিষ্ট correction model প্রয়োগের ফল। সূর্য ও চন্দ্রের জন্য প্রধানত মন্দ-সংশোধন, আর পাঁচ দৃশ্যমান গ্রহের জন্য মন্দ ও শীঘ্র—দুই ধরনের correction লাগে।

স্তর অর্থ ব্যবহার
মধ্যম অবস্থান অহর্গণ ও আবর্তন-ধ্রুবক থেকে সমবেগে গণিত longitude পরবর্তী correction-এর base value
মন্দফল মধ্যম অবস্থান ও মন্দোচ্চের angular relation থেকে correction অসম apparent speed-এর traditional model
শীঘ্রফল সূর্য–গ্রহের আপেক্ষিক geometry থেকে correction বুধ, শুক্র, মঙ্গল, বৃহস্পতি ও শনির true position
স্পষ্ট অবস্থান ঘোষিত sequence-এ সব correction-এর পর longitude রাশি, পদ, গ্রহস্ফুট ও comparative report

যুগ ও আবর্তন-ধ্রুবক

Traditional engine একটি মহাযুগে নক্ষত্র, সূর্য, চন্দ্র, গ্রহ, চন্দ্রোচ্চ ও রাহুর মোট আবর্তন-সংখ্যা সংরক্ষণ করে। বর্তমান project engine-এর মূল constants-এর একটি সংক্ষিপ্ত রূপ:

চলক মূল আবর্তন ব্যাখ্যা
নক্ষত্র১,৫৮২,২৩৭,৮০০নাক্ষত্রিক ঘূর্ণন-ভিত্তিক civil-day derivation
সূর্য৪,৩২০,০০০সূর্যের mean revolution
চন্দ্র৫৭,৭৫৩,৩৩৬চন্দ্রের mean revolution
বুধ১৭,৯৩৭,০০০বুধের শীঘ্র-চক্রে ব্যবহৃত constant
শুক্র৭,০২২,৩৮৮শুক্রের শীঘ্র-চক্রে ব্যবহৃত constant
মঙ্গল২,২৯৬,৮২৪মঙ্গলের mean revolution
বৃহস্পতি৩৬৪,২২০বৃহস্পতির mean revolution
শনি১৪৬,৫৬৪শনির mean revolution
চন্দ্রোচ্চ৪৮৮,২১৯চন্দ্রের apogee motion
রাহু−২৩২,২২৬node-এর বিপরীতমুখী motion

এই সংখ্যাগুলি modern orbital elements নয়; এগুলি নিজস্ব traditional system-এর অংশ। তাই একটি constant আধুনিক observation-এর সঙ্গে মিলিয়ে ইচ্ছামতো বদলালে সেই পরিবর্তনের প্রভাব civil days, mean positions, calendar elements এবং long-term historical continuity-তে ছড়িয়ে পড়তে পারে।

অহর্গণ: calculation-এর সময়-অক্ষ

অহর্গণ হলো নির্বাচিত epoch থেকে অতিক্রান্ত দিনের ধারাবাহিক সংখ্যা। Gregorian বা Julian year–month–day হলো মানুষের calendar label; planetary equations-এর জন্য এগুলিকে প্রথমে একটি continuous day count-এ রূপান্তর করা সুবিধাজনক।

Fraction শুধু পূর্ণ আবর্তনের পর অবশিষ্ট অংশ রাখে। ফলকে সবসময় ০° ≤ longitude < ৩৬০° সীমায় normalize করতে হয়। Negative node motion বা wrap-around-এর জন্য এই normalization বাধ্যতামূলক।

বর্তমান C# engine UTC instant-কে Julian Day-এ রূপান্তর করে, তারপর উজ্জয়িনীর reference longitude-এর সঙ্গে সামঞ্জস্য রেখে ahargana তৈরি করে। উল্টো conversion-এ একই offset বিপরীত চিহ্নে ফেরত দেওয়া হয়। Round-trip test—UTC → ahargana → UTC—তাই গুরুত্বপূর্ণ।

অব্দপিণ্ড ও দিনবৃন্দ: report-এর intermediate audit values

Printed Panjika ও বিভিন্ন করণ-গ্রন্থে বার্ষিক calculation-এর intermediate aggregate-কে অব্দপিণ্ড, দিনবৃন্দ বা কাছাকাছি regional নামে দেখানো হতে পারে। সব গ্রন্থে এই নামের formula এক নয়। কোনো বইয়ের table port করার সময় প্রথমে সেই edition-এর সংজ্ঞা, epoch, expired/current year convention এবং remainder-divisor লিখে রাখা জরুরি।

Software report-এ এই দুটি field রাখা যেতে পারে, তবে শুধু label অনুকরণ না করে তাদের provenance প্রকাশ করা উচিত:

  • কোন traditional text বা printed table-এর formula ব্যবহৃত হয়েছে;
  • শকাব্দ, বঙ্গাব্দ, কলিযুগ বা Gregorian—কোন year input নেওয়া হয়েছে;
  • year elapsed না current;
  • কোন quotient ও remainder রাখা হয়েছে;
  • শেষে কোন day count বা ahargana-তে তা map হয়েছে।

দেশান্তর: উজ্জয়িনী থেকে নির্বাচিত স্থানের দ্রাঘিমা

Traditional calculation-এর reference meridian হিসেবে বর্তমান engine উজ্জয়িনীর দ্রাঘিমা ৭৫.৮° পূর্ব ব্যবহার করে। নির্বাচিত স্থানের longitude-এর পার্থক্যকে এক দিনের fraction-এ রূপান্তর করা হয়:

Dhaka বা Kolkata উজ্জয়িনীর পূর্বে; New York পশ্চিমে। তাই signed longitude বজায় রাখতে হবে। বর্তমান legacy sunrise flow-এ provisional ahargana তৈরি হয়:

double desantara = (request.Longitude - UjjainLongitude) / 360.0;
double provisional = baseAhar + 0.25 - desantara;

এখানে ০.২৫ দিন ছয় ঘণ্টার fraction; পরবর্তী daylight equation ও sunrise logic classical sunrise ahargana নির্ধারণ করে। দেশান্তর একটি longitude correction—timezone offset নয়। Local civil time, timezone/DST এবং deśāntara তিনটি আলাদা স্তর।

বীজ সংশোধন: ধ্রুবক বদলানোর নিয়ন্ত্রিত ধাপ

দীর্ঘ সময়ের accumulated difference সামঞ্জস্য করতে traditional program-এ আবর্তন-সংখ্যার ওপর ছোট বীজ সংশোধন প্রয়োগ করা হয়। এই project-এর port M. Yano ও M. Fushimi-এর pancanga 3.14–এর add_bija() অনুসরণ করে। বর্তমান canonical corrections:

চলক যোগ/বিয়োগ ফল
নক্ষত্র+২৮canonical star correction
বুধ+৬০corrected revolution constant
শুক্র−১২corrected revolution constant
মঙ্গল+৮corrected revolution constant
শনি+৪corrected revolution constant
চন্দ্রোচ্চ−১৬corrected apogee motion
রাহু−১২corrected node motion

বীজ একবারই প্রয়োগ করতে হবে। Raw constants আগে হাতে বদলে রেখে আবার ApplyBijaCorrection() চালালে double correction হবে। তাই engine initialization-এ raw table → optional canonical Bīja → derived counts—এই একমুখী sequence রাখুন।

void ApplyBijaCorrection()
{
    yr["star"]       += starCorrection;
    yr["mercury"]    += 60;
    yr["venus"]      -= 12;
    yr["mars"]       += 8;
    yr["saturn"]     += 4;
    yr["Candrocca"]  -= 16;
    yr["Rahu"]       -= 12;
}

এরপর derived quantities পুনর্গণনা হয়:

মধ্যম longitude নির্ণয়

Engine-এর core mean-motion function অত্যন্ত সংক্ষিপ্ত:

double Mean(double ahar, double rotation)
{
    return 360.0 * Frac(rotation * ahar / civilDays);
}

এই function-এর input হলো exact ahargana এবং সংশ্লিষ্ট revolution constant। Output degree-তে একটি normalized mean longitude। Report-এ raw double অন্তত পর্যাপ্ত decimal precision-এ রাখতে হবে; UI-তে পরে degree–minute–second বা রাশি–অংশ–কলা format করা হবে।

Mean position পুনরুৎপাদনের জন্য report metadata-তে ahargana, civil days, Bīja enabled/disabled, star correction value এবং engine version রাখুন। শুধু formatted “মেষ ১২°” সংরক্ষণ করলে calculation audit সম্ভব নয়।

মন্দ সংশোধন

মন্দ correction-এ mean planet এবং তার মন্দোচ্চের difference থেকে anomaly গঠিত হয়। Model-এর circumference parameter ও sine relation ব্যবহার করে একটি angular equation পাওয়া যায়:

সাইন বা চিহ্ন quadrant অনুযায়ী পরিবর্তিত হয়; একটি absolute value নিয়ে সব ক্ষেত্রে বিয়োগ করা যাবে না। Current engine-এর Manda() function এবং caller sequence-কে একসঙ্গে test করতে হবে।

সূর্যের traditional true longitude মূলত mean Sun থেকে manda equation বাদ দিয়ে পাওয়া হয়। চন্দ্রের ক্ষেত্রে mean lunar apogee—Candrocca motion থেকে নির্মিত—ব্যবহার করে lunar manda correction করা হয়।

শীঘ্র সংশোধন

পাঁচ গ্রহে শীঘ্র correction সূর্য ও গ্রহের আপেক্ষিক configuration model করে। বুধ ও শুক্রের জন্য তাদের শীঘ্র motion সূর্যকেন্দ্রিক relation-এ ব্যবহৃত হয়; মঙ্গল, বৃহস্পতি ও শনির sequence-এ mean Sun এবং mean planet-এর relation ভিন্নভাবে প্রবেশ করে।

বর্তমান engine প্রথমে একটি শীঘ্র correction-এর অর্ধাংশ নিয়ে manda argument সংশোধন করে, তারপর manda correction-এর অর্ধাংশ দিয়ে আরেক intermediate position তৈরি করে। Final manda-এর পর আবার শীঘ্র correction প্রয়োগ করে true longitude পাওয়া হয়।

এখানে অর্ধ correction-গুলি rounding-এর আগেই double precision-এ রাখা দরকার। প্রতি ধাপে Bengali DMS string বানিয়ে আবার parse করলে minute/second rounding জমে final longitude বদলে যেতে পারে।

সূর্য, চন্দ্র, রাহু–কেতু ও পাঁচ গ্রহের calculation chain

গ্রহ/বিন্দু প্রধান input Correction chain
সূর্য Mean Sun, solar mandocca Mean → Manda → True Sun
চন্দ্র Mean Moon, mean Candrocca Mean → Lunar Manda → True Moon
বুধ ও শুক্র Mean Sun, own sighra, mandocca Sighra½ → Manda½ → full Manda → final Sighra
মঙ্গল, বৃহস্পতি ও শনি Own mean planet, Mean Sun, mandocca Sighra½ → Manda½ → full Manda → final Sighra
রাহু Negative node revolution Mean node normalized to zodiac convention
কেতু রাহুর বিপরীত বিন্দু Normalize(Rahu + 180°)

বক্রগতি দেখাতে শুধু “আজকের longitude গতকালের চেয়ে ছোট” পরীক্ষা যথেষ্ট নয়, কারণ ৩৫৯° থেকে ০° crossing ঘটতে পারে। Wrap-aware signed angular difference ব্যবহার করুন:

double SignedDelta(double later, double earlier)
{
    double d = Normalize(later - earlier);
    return d > 180.0 ? d - 360.0 : d;
}

bool retrograde = SignedDelta(tomorrow, today) < 0.0;

মেষ সংক্রান্তিতে বার্ষিক Mean Planet report

বাংলা বছরের শুরুতে yearly report তৈরি করতে civil midnight বা ১ বৈশাখের sunrise নয়, ঘোষিত Surya Siddhanta branch-এ True Sun-এর নিরয়ণ longitude ০° অতিক্রমের exact instant খুঁজতে হবে। এটিই মেষ সংক্রান্তির root event।

Root-finding flow:

  1. Expected date-এর আগে ও পরে True Sun longitude sample করে crossing bracket করুন;
  2. ৩৬০°/০° wrap unwrap করে signed function তৈরি করুন;
  3. Bisection বা Brent method-এ second-level tolerance পর্যন্ত event time বের করুন;
  4. একই instant-এর UTC, local time, Julian Day এবং ahargana freeze করুন;
  5. সেই ahargana-তেই সব mean ও true planet calculation চালান;
  6. Report header-এ location, timezone, mode, engine version ও correction profile লিখুন।

Report-এর একটি audit-friendly বিন্যাস:

Section প্রস্তাবিত data
Event identity বাংলা বছর, মেষ সংক্রান্তি local time, UTC, Julian Day
Reference Latitude, longitude, timezone ID, UTC offset, Ujjain longitude
Time counts Ahargana; source-defined Abda Piṇḍa ও Dinavṛnda থাকলে formula ID-সহ
Bīja Raw constant, correction, corrected constant—তিন column
Deśāntara Degree difference, day fraction এবং time-equivalent
Mean planets Raw degrees, normalized degrees, rāśi–aṁśa–kalā
Corrections Mandocca, manda equation, sighra equation ও intermediate values
True planets Final longitude, রাশি, নক্ষত্র-পদ, direct/retrograde flag
Comparative ঐচ্ছিক Swiss Ephemeris value ও signed difference—স্পষ্ট আলাদা label-এ

True Sun event-এ ০° হওয়ার কথা, কিন্তু mean Sun সাধারণত ০° হবে না—কারণ manda correction-এর পরেই true longitude মেষে প্রবেশ করেছে। এই পার্থক্য report-এর error নয়; বরং mean ও true position আলাদা হওয়ার দৃশ্যমান উদাহরণ।

Post-1947 Modern Fit correction-এর সীমানা

Printed Bengali Panjika-এর আধুনিক সংক্রান্তি ও বাংলা solar date মিলানোর জন্য project-এ ১৯৪৭ থেকে মাসভিত্তিক dynamic star-correction profile ব্যবহার করা হয়েছে। পরীক্ষিত profile:

এই calibration-এর উদ্দেশ্য হলো modern printed tradition-এর Saṅkrānti এবং Bengali solar date-এর সঙ্গে fit করা। এটি canonical Bīja table-এর universal replacement নয়। Architecture-এ আলাদা policy রাখুন:

Calculation Canonical Traditional Post-1947 Modern Fit
ঐতিহাসিক গ্রহস্ফুটCanonical star +২৮প্রয়োগ নয়
তিথিCanonical engineপ্রয়োগ নয়
নক্ষত্র, যোগ, করণCanonical engineপ্রয়োগ নয়
গ্রহণCanonical বা ঘোষিত Drik branchপ্রয়োগ নয়
Saṅkrānti eventHistorical mode১৯৪৭+ selected month correction
বাংলা solar dateHistorical mode১৯৪৭+ selected month correction

Traditional Surya Siddhanta ও Drik result কীভাবে তুলনা করবেন?

Traditional result এবং Swiss Ephemeris result দুই ভিন্ন model-এর output। তাদের difference দেখানো উপকারী, কিন্তু একটিকে অন্যটির “correction” হিসেবে মাঝপথে ঢুকিয়ে hybrid result তৈরি করা উচিত নয়।

বিষয় Traditional branch Drik branch
মূল dataযুগগত revolution constants ও traditional equationsModern numerical ephemeris
ReferenceTraditional epoch ও Ujjain conventionJulian Day, UT/TT এবং selected ephemeris
Zodiacনিজস্ব traditional nirayana frameworkDeclared ayanāṃśa, যেমন Lahiri
উদ্দেশ্যঐতিহাসিক পঞ্জিকা ও model reproductionModern astronomical position ও comparison
Expected relationDifference থাকা স্বাভাবিক; mode ও metadata প্রকাশ করতে হবে

Comparison table-এ একই instant ও একই longitude convention নিশ্চিত করুন। Swiss output tropical হলে আগে declared ayanāṃśa অনুযায়ী sidereal করুন; geocentric ও topocentric value মিশাবেন না; এবং “true”, “apparent”, “mean” flags প্রকাশ করুন।

C# implementation policy

Calculation, profile selection, report model ও rendering আলাদা রাখলে historical এবং Modern Fit branch নিরাপদ থাকে:

Component দায়িত্ব
SuryaSiddhantaConstantsImmutable raw revolution, mandocca ও circumference data
BijaProfileCanonical Bīja values; একবার প্রয়োগের নিশ্চয়তা
AharganaConverterUTC/JD ↔ ahargana এবং Ujjain reference
TraditionalPlanetEngineMean, manda, sighra ও true longitude
SankrantiCorrectionProfile১৯৪৭+ month-wise Modern Fit; শুধু solar-date branch
MeshaIngressFinderTrue Sun ০° crossing root solve
YearlyPlanetReportRaw numeric audit data ও metadata
YearlyPlanetReportRendererHTML, print ও XML formatting

Profile object immutable হলে একই request-এর মাঝখানে star correction বদলে যাওয়ার ঝুঁকি কমে:

public sealed class CalculationProfile
{
    public string Id { get; init; }
    public bool ApplyCanonicalBija { get; init; }
    public int CanonicalStarCorrection { get; init; }
    public bool ModernSankrantiFit { get; init; }
    public int ModernFitCutoffYear { get; init; }
}

// Planetary and panchanga calculations
var traditional = Profiles.CanonicalSuryaSiddhanta;

// Only Sankranti and Bengali solar-date calculations
var solarCalendar = Profiles.ModernPrintedFit1947;

Report model-এ formatted Bengali string-এর পাশাপাশি raw numeric values রাখুন। XML export-এ machine-readable degree, JD এবং ahargana attributes দিলে ভবিষ্যতে table পুনরায় যাচাই করা যাবে।

Validation checklist

  1. Raw constants-এর snapshot test;
  2. Bīja enabled/disabled—দুই mode এবং exactly-once test;
  3. Derived civil days ও synodic-month counts;
  4. Mean longitude সবসময় ০°–৩৬০°;
  5. Negative Rahu revolution এবং Rahu–Ketu ১৮০° opposition;
  6. UTC → ahargana → UTC round-trip;
  7. Dhaka, Kolkata ও New York-এ deśāntara sign;
  8. Gregorian/Julian conversion boundary-তে continuous JD;
  9. Manda equation-এর চার quadrant;
  10. প্রতিটি গ্রহের intermediate correction golden values;
  11. ৩৫৯.৯° → ০.১° crossing-এ direct motion;
  12. Retrograde station-এর দুই পাশে signed delta;
  13. Mesha ingress root-এর আগে Sun < ০° এবং পরে Sun ≥ ০°—unwrapped scale-এ;
  14. Exact ingress instant-এ True Sun tolerance-এর মধ্যে ০°;
  15. Historical mode-এ বছর ১–১৪৩৩ batch continuity;
  16. ১৯৪৬ ও ১৯৪৭ boundary-তে profile selection;
  17. Modern Fit tithi/nakṣatra/yoga/karana ও graha result বদলায় না;
  18. HTML, print ও XML-এ একই raw report ID;
  19. Swiss comparison-এ একই UTC instant, zodiac mode ও coordinate type।

Golden test-এর source হিসেবে নির্দিষ্ট printed Panjika ব্যবহার করলে edition, publication place, year, page এবং পড়া time-unit লিখুন। একটি scanned value ভুল পড়া হতে পারে; তাই single-book fit-কে universal truth না ধরে multiple-source evidence রাখুন।

উপসংহার

সূর্য সিদ্ধান্তের গ্রহগণনা একটি ধারাবাহিক model: epoch ও আবর্তন-ধ্রুবক → অহর্গণ → মধ্যম longitude → মন্দ ও শীঘ্র correction → স্পষ্ট longitude। দেশান্তর selected location-কে Ujjain reference-এর সঙ্গে যুক্ত করে; Bīja দীর্ঘমেয়াদি constants-এর ঘোষিত adjustment; আর Abda Piṇḍa বা Dinavṛnda-র মতো printed intermediate values source-specific সংজ্ঞা ছাড়া ব্যবহার করা উচিত নয়।

মেষ সংক্রান্তির yearly report-এ একই exact event instant-এ mean ও true planets, Bīja table, deśāntara এবং audit metadata ধরলে ফল গবেষণাযোগ্য হয়। Traditional এবং Drik value পাশাপাশি দেখানো যায়, কিন্তু তাদের engine ও terminology মেশানো যাবে না।

সবচেয়ে গুরুত্বপূর্ণ software boundary হলো canonical engine ও post‑1947 Modern Fit-এর বিচ্ছেদ। মাসভিত্তিক star calibration modern Bengali Saṅkrānti ও solar date-এর জন্য; এটি tithi, nakṣatra, yoga, karaṇa, eclipse, historical planet বা canonical yearly mean-planet report বদলাবে না। এই separation-ই project-কে একই সঙ্গে printed tradition-এর উপযোগী এবং historical research-এর জন্য স্বচ্ছ রাখে।

তথ্যসূত্র ও আরও পাঠ

  1. Ebenezer Burgess, Translation of the Sûrya-Siddhânta: A Text-book of Hindu Astronomy, Journal of the American Oriental Society, Vol. 6, 1860; বিশেষত mean motions ও true places অধ্যায়।
  2. M. Yano ও M. Fushimi—Pancanga 3.14; Surya Siddhanta–ভিত্তিক traditional calendar program.
  3. Pancanga 3.14 message and program notes; source history, model scope ও version notes.
  4. Astrodienst—Swiss Ephemeris Programmer’s Documentation; modern ephemeris comparison-এর flags, time scale ও coordinate conventions.
  5. Astrodienst—official Swiss Ephemeris source repository.
  6. সূর্য সিদ্ধান্ত পঞ্জিকা project, SuryaSiddhantaEngine.cs; revolution constants, Bīja, ahargana, deśāntara, mean, manda ও sighra implementation.
  7. Project research notes: post‑1947 Modern Fit Sankranti Star Correction table এবং canonical/historical calculation boundary.

মন্তব্য, আলোচনা ও প্রশ্ন