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

নক্ষত্র গণনা: চন্দ্রের ২৭ ভাগে অবস্থান ও শেষ সময় কীভাবে নির্ণীত হয়?

নিরয়ণ চন্দ্রদ্রাঘিমাকে ২৭টি ১৩°২০′ নক্ষত্র ও ১০৮টি ৩°২০′ পদে ভাগ, নক্ষত্রের শেষ সময়, ayanamsa, sunrise assignment এবং C# implementation।

একটি app-এ “রোহিণী সকাল ১০:২৩ পর্যন্ত, পরে মৃগশিরা” দেখাতে দুটি কাজ করতে হয়: sunrise instant-এ নিরয়ণ Moon longitude থেকে current sector নির্ধারণ এবং Moon পরবর্তী ১৩°২০′ boundary কখন অতিক্রম করছে তার root solve। শুধু দিনের শুরু ও শেষে নক্ষত্র sample করলে exact end time, কখনও intermediate transition-ও হারিয়ে যেতে পারে।

নক্ষত্রের mathematical definition

Standard 27-nakṣatra computational model-এ sidereal ecliptic ০° থেকে ৩৬০° পর্যন্ত সমান sector-এ বিভক্ত। প্রথম sector ০° মেষ থেকে অশ্বিনী; এরপর ভরণী, কৃত্তিকা—ক্রমে রেবতী পর্যন্ত।

NakshatraIndex ১–২৭। Boundary interval half-open: start inclusive, end exclusive। তাই Moon ঠিক ১৩°২০′-এ পৌঁছালে অশ্বিনী শেষ; ভরণী শুরু।

প্রতিটি নক্ষত্র ১৩°২০′, প্রতিটি পদ ৩°২০′

Floating-point repeating decimal 13.333333... ব্যবহার না করে arcminute বা arcsecond integer constants রাখা নিরাপদ। পূর্ণ zodiac = ১,২৯৬,০০০ arcseconds; একটি নক্ষত্র = ৪৮,০০০ arcseconds; একটি pada = ১২,০০০ arcseconds।

২৭ নক্ষত্রের sidereal boundary

#নক্ষত্রশুরুশেষ
১অশ্বিনীমেষ ০°০০′মেষ ১৩°২০′
২ভরণীমেষ ১৩°২০′মেষ ২৬°৪০′
৩কৃত্তিকামেষ ২৬°৪০′বৃষ ১০°০০′
৪রোহিণীবৃষ ১০°০০′বৃষ ২৩°২০′
৫মৃগশিরাবৃষ ২৩°২০′মিথুন ৬°৪০′
৬আর্দ্রামিথুন ৬°৪০′মিথুন ২০°০০′
৭পুনর্বসুমিথুন ২০°০০′কর্কট ৩°২০′
৮পুষ্যাকর্কট ৩°২০′কর্কট ১৬°৪০′
৯অশ্লেষাকর্কট ১৬°৪০′কর্কট ৩০°০০′
১০মঘাসিংহ ০°০০′সিংহ ১৩°২০′
১১পূর্বফাল্গুনীসিংহ ১৩°২০′সিংহ ২৬°৪০′
১২উত্তরফাল্গুনীসিংহ ২৬°৪০′কন্যা ১০°০০′
১৩হস্তাকন্যা ১০°০০′কন্যা ২৩°২০′
১৪চিত্রাকন্যা ২৩°২০′তুলা ৬°৪০′
১৫স্বাতীতুলা ৬°৪০′তুলা ২০°০০′
১৬বিশাখাতুলা ২০°০০′বৃশ্চিক ৩°২০′
১৭অনুরাধাবৃশ্চিক ৩°২০′বৃশ্চিক ১৬°৪০′
১৮জ্যেষ্ঠাবৃশ্চিক ১৬°৪০′বৃশ্চিক ৩০°০০′
১৯মূলাধনু ০°০০′ধনু ১৩°২০′
২০পূর্বাষাঢ়াধনু ১৩°২০′ধনু ২৬°৪০′
২১উত্তরাষাঢ়াধনু ২৬°৪০′মকর ১০°০০′
২২শ্রবণামকর ১০°০০′মকর ২৩°২০′
২৩ধনিষ্ঠামকর ২৩°২০′কুম্ভ ৬°৪০′
২৪শতভিষাকুম্ভ ৬°৪০′কুম্ভ ২০°০০′
২৫পূর্বভাদ্রপদকুম্ভ ২০°০০′মীন ৩°২০′
২৬উত্তরভাদ্রপদমীন ৩°২০′মীন ১৬°৪০′
২৭রেবতীমীন ১৬°৪০′মীন ৩০°০০′

Regional spelling—পুষ্যা/পুষ্য, হস্তা/হস্ত, শ্রবণা/শ্রবণ—language resource-এ রাখা উচিত। Calculation model numeric index ও stable key ব্যবহার করবে।

নক্ষত্র ও pada index

Moon longitude L degree-এ থাকলে:

উদাহরণ: L = 45°। এটি বৃষ ১৫°, অর্থাৎ রোহিণী sector [৪০°, ৫৩°২০′)-এর ভিতরে। Sector offset ৫°; তাই দ্বিতীয় pada [৩°২০′, ৬°৪০′)-এর মধ্যে। Result: রোহিণী, ২য় পদ।

Ayanāṃśa কেন নক্ষত্রের জন্য অপরিহার্য?

Ephemeris সাধারণত tropical longitude দিতে পারে। নক্ষত্রের জন্য chosen sidereal reference অনুযায়ী নিরয়ণ longitude দরকার:

Lahiri/Chitrapaksha, Raman, Krishnamurti বা project-specific traditional model একই date-এ ভিন্ন ayanāṃśa দিতে পারে। Moon যদি sector boundary-এর কাছে থাকে, এই difference নক্ষত্রের নাম, pada এবং end time বদলে দিতে পারে।

তিথির সঙ্গে নক্ষত্রের সবচেয়ে গুরুত্বপূর্ণ পার্থক্য

বিষয়তিথিনক্ষত্র
মূল quantityMoon − Sun elongationMoon-এর absolute sidereal longitude
বিভাগ৩০ × ১২°২৭ × ১৩°২০′
Ayanāṃśaএকই offset দুই longitude-এ cancel করেসরাসরি boundary বদলায়
CycleSynodic month, প্রায় ২৯.৫ দিনSidereal Moon circuit, প্রায় ২৭.৩ দিন
Daily assignmentসাধারণত sunrise tithiসাধারণত sunrise nakṣatra

আগের article-এর tithi code-এ ayanāṃśa cancellation সত্য হলেও সেটি নক্ষত্র code-এ copy করা যাবে না। নক্ষত্র boundary-এর জন্য sidereal zero-point calculation-এর অংশ।

Geocentric না topocentric Moon?

Standard Panchanga nakṣatra সাধারণত geocentric Moon longitude থেকে নির্ণীত হয়। Moon নিকটবর্তী হওয়ায় topocentric parallax noticeable; observer latitude/longitude ব্যবহার করে topocentric position নিলে boundary time বদলে যেতে পারে।

Location অবশ্যই sunrise ও local display-এর জন্য দরকার, কিন্তু সেই কারণে Moon longitude-ও topocentric করতে হবে—এমন নয়। Profile field explicit রাখুন:

moonReference = "geocentric"
siderealMode = "lahiri"       // অথবা project-specific
eventTimeScale = "UT"
displayZone = "Asia/Dhaka"

কোনো printed Panchanga topocentric বা অন্য correction অনুসরণ করলে সেটি আলাদা versioned profile হবে; silently standard result-এর সঙ্গে mix করবেন না।

নক্ষত্রের শেষ সময় কীভাবে পাওয়া যায়?

Current index N হলে next boundary:

Moon longitude এক দিনের মধ্যে linear ধরে remaining-degree ÷ average-speed করলে approximate time পাওয়া যায়, published end time নয়। Moon-এর speed পরিবর্তিত হয়; ayanāṃśa-ও সময়ের সঙ্গে সামান্য বদলায়। প্রতিটি trial Julian Day-এ full longitude function পুনর্গণনা করে root solve করুন।

Practical method:

  1. Starting instant-এ current longitude ও next target নিন;
  2. ২–৩ ঘণ্টার step-এ forward scan করে crossing bracket করুন;
  3. Longitude ৩৬০° wrap করলে continuous value-তে unwrap করুন;
  4. Bisection বা Brent solver দিয়ে requested tolerance-এ root;
  5. UTC/JD instant সংরক্ষণ করে requested time zone-এ render করুন।

Sunrise-based daily display

Daily Panchanga day local sunrise থেকে পরের sunrise। প্রথম sunrise-এ যে নক্ষত্র বর্তমান, সেটি primary label; day-এর ভিতরে transition হলে end time এবং “পরে” নক্ষত্র দেখানো হয়।

Boundary countDaily display
০নক্ষত্র next sunrise পর্যন্ত; project style অনুযায়ী “অহোরাত্র”
১“রোহিণী … পর্যন্ত পরে মৃগশিরা”
২দুই transition-ই list; মধ্যবর্তী নক্ষত্র sunrise-এ অনুপস্থিত হতে পারে

একটি নক্ষত্র পরপর দুই sunrise-এ থাকলে sunrise list-এ বৃদ্ধি-সদৃশ পুনরাবৃত্তি দেখা যায়। আবার দুটি sunrise-এর মাঝখানে সম্পূর্ণ নক্ষত্র এসে চলে গেলে sunrise-only grid সেটি বাদ দিতে পারে। Daily details ও XML-এ raw transitions সংরক্ষণ করলে তথ্য হারায় না।

অভিজিৎ এবং ২৮ নক্ষত্রের ঐতিহাসিক প্রসঙ্গ

ঐতিহাসিক ও কিছু ritual tradition-এ অভিজিৎ-সহ ২৮ নক্ষত্রের উল্লেখ আছে। কিন্তু common modern Panchanga-এর ২৭ equal-sector algorithm-এ অভিজিৎকে ২৮তম সমান division হিসেবে ঢোকানো হয় না। 360 / 28 করলে সমস্ত standard boundary বদলে যাবে—এটি ভুল implementation।

অভিজিৎ প্রয়োজন হলে আলাদা SpecialNakshatraWindow বা tradition-specific overlay হিসেবে model করুন। Standard index ১–২৭ অপরিবর্তিত থাকবে; overlap, ritual use এবং source authority metadata-তে প্রকাশ করুন।

Production calculation pipeline

  1. Profile: Moon engine, reference frame, ayanāṃśa, time scale ও tolerance স্থির করুন;
  2. Moon position: requested JD-তে geocentric tropical/apparent longitude;
  3. Sidereal conversion: same JD/profile-এর ayanāṃśa প্রয়োগ;
  4. State: ১৩°২০′ sector ও ৩°২০′ pada;
  5. Target: next ৪৮,০০০ arcsecond boundary;
  6. Bracket: short forward stepping;
  7. Root: unwrapped longitude দিয়ে exact instant;
  8. Vedic day: sunrise-to-next-sunrise সব roots collect;
  9. Localization: local clock, নিশা এবং দণ্ড-পল format;
  10. Export: raw JD, longitude, ayanāṃśa ও profile ID সহ output।

Boundary arithmetic-এ arcsecond integer model

const int ArcSecondsPerDegree = 3600;
const int FullCircleArcSeconds = 360 * ArcSecondsPerDegree; // 1,296,000
const int NakshatraArcSeconds = FullCircleArcSeconds / 27;  // 48,000
const int PadaArcSeconds = NakshatraArcSeconds / 4;         // 12,000

Ephemeris longitude double থাকবে, কিন্তু index/boundary constants exact integer হতে পারে। Boundary-এর কাছে longitude আগে integer-এ round করে index বের করবেন না; তাতে কয়েক milliarcsecond-এর error state উল্টে দিতে পারে। Double longitude দিয়ে half-open comparison, integer constants থেকে exact target তৈরি করুন।

C# 5-compatible নক্ষত্র state

public sealed class NakshatraState
{
    public int Index { get; set; }            // 1..27
    public string Key { get; set; }
    public string NameBn { get; set; }
    public int Pada { get; set; }             // 1..4
    public double Longitude { get; set; }
    public double StartLongitude { get; set; }
    public double EndLongitude { get; set; }
    public double OffsetInside { get; set; }
}

static readonly string[] NakshatraKeys =
{
    "ashwini", "bharani", "krittika", "rohini", "mrigashira",
    "ardra", "punarvasu", "pushya", "ashlesha", "magha",
    "purva-phalguni", "uttara-phalguni", "hasta", "chitra",
    "swati", "vishakha", "anuradha", "jyeshtha", "mula",
    "purva-ashadha", "uttara-ashadha", "shravana", "dhanishtha",
    "shatabhisha", "purva-bhadrapada", "uttara-bhadrapada", "revati"
};

static readonly string[] NakshatraNamesBn =
{
    "অশ্বিনী", "ভরণী", "কৃত্তিকা", "রোহিণী", "মৃগশিরা",
    "আর্দ্রা", "পুনর্বসু", "পুষ্যা", "অশ্লেষা", "মঘা",
    "পূর্বফাল্গুনী", "উত্তরফাল্গুনী", "হস্তা", "চিত্রা",
    "স্বাতী", "বিশাখা", "অনুরাধা", "জ্যেষ্ঠা", "মূলা",
    "পূর্বাষাঢ়া", "উত্তরাষাঢ়া", "শ্রবণা", "ধনিষ্ঠা",
    "শতভিষা", "পূর্বভাদ্রপদ", "উত্তরভাদ্রপদ", "রেবতী"
};

static double Normalize360(double value)
{
    value %= 360.0;
    if (value < 0.0) value += 360.0;
    return value;
}

static NakshatraState NakshatraAt(double nirayanaMoonLongitude)
{
    const double sector = 360.0 / 27.0;
    const double padaSize = sector / 4.0;
    double longitude = Normalize360(nirayanaMoonLongitude);
    int zeroBased = (int)Math.Floor(longitude / sector);

    if (zeroBased < 0) zeroBased = 0;
    if (zeroBased > 26) zeroBased = 26;

    double start = zeroBased * sector;
    double end = (zeroBased + 1) * sector;
    double offset = longitude - start;
    int pada = (int)Math.Floor(offset / padaSize) + 1;
    if (pada > 4) pada = 4;

    return new NakshatraState
    {
        Index = zeroBased + 1,
        Key = NakshatraKeys[zeroBased],
        NameBn = NakshatraNamesBn[zeroBased],
        Pada = pada,
        Longitude = longitude,
        StartLongitude = start,
        EndLongitude = end,
        OffsetInside = offset
    };
}

Display spelling data array থেকে সরিয়ে resource file-এ নিলে Assamese বা অন্য language সহজে যোগ করা যাবে। Key ও index calculation core-এ অপরিবর্তিত থাকবে।

Unwrapped Moon longitude দিয়ে boundary root

রেবতী থেকে অশ্বিনীতে গেলে normalized longitude ৩৫৯° থেকে ০° হয়। Root function যেন পিছিয়ে যাওয়া না দেখে, anchor-relative forward longitude ব্যবহার করুন:

static double ForwardArc(double value, double anchor)
{
    return Normalize360(value - anchor);
}

static double SolveNakshatraBoundary(
    double leftJd,
    double rightJd,
    double anchorLongitude,
    double targetForwardArc,
    Func<double, double> nirayanaMoonLongitude,
    double toleranceDays)
{
    Func<double, double> f = delegate(double jd)
    {
        double current = nirayanaMoonLongitude(jd);
        return ForwardArc(current, anchorLongitude) - targetForwardArc;
    };

    double leftValue = f(leftJd);
    double rightValue = f(rightJd);
    if (leftValue > 0.0 || rightValue < 0.0)
        throw new ArgumentException("Nakshatra boundary is not bracketed.");

    while (rightJd - leftJd > toleranceDays)
    {
        double middleJd = (leftJd + rightJd) / 2.0;
        if (f(middleJd) < 0.0)
            leftJd = middleJd;
        else
            rightJd = middleJd;
    }

    return (leftJd + rightJd) / 2.0;
}

nirayanaMoonLongitude(jd) প্রতিবার সেই JD-এর ayanāṃśa ব্যবহার করবে। একটি দিনের শুরুতে ayanāṃśa calculate করে সব trial point-এ constant ধরে নেওয়া unnecessary approximation।

Vedic day-এর সব নক্ষত্র event

public sealed class NakshatraBoundary
{
    public int EndingIndex { get; set; }
    public int StartingIndex { get; set; }
    public double JulianDayUt { get; set; }
    public DateTimeOffset InstantUtc { get; set; }
}

public sealed class VedicDayNakshatraReport
{
    public DateTimeOffset Sunrise { get; set; }
    public DateTimeOffset NextSunrise { get; set; }
    public NakshatraState AtSunrise { get; set; }
    public IList<NakshatraBoundary> Boundaries { get; set; }
    public string AstronomyProfile { get; set; }
    public string AyanamsaProfile { get; set; }
}

Scanner current boundary solve করার পর next index/target নিয়ে চলবে যতক্ষণ root nextSunriseJd-এর আগে। Exact next sunrise boundary হলে half-open Vedic-day rule অনুযায়ী event পরের day-এ assign করুন:

sunriseJd <= boundaryJd && boundaryJd < nextSunriseJd

বাংলা clock time, নিশা এবং দণ্ড-পল

একই boundary তিনভাবে দেখানো যেতে পারে:

  • Civil clock: রাত ১০:২৬:০৬;
  • Vedic-day label: “রাত্র” বা midnight-এর পরে project convention অনুযায়ী “নিশা”;
  • Sunrise-relative: দণ্ড/পল/বিপল।

Clock time ও দণ্ড-পল একই absolute instant থেকে render করুন। দুটি আলাদা calculation করলে rounding বা DST-এর কারণে mismatch হতে পারে। Vedic elapsed fraction:

আপনার project যদি seasonal ৬০-দণ্ড Vedic day scale ব্যবহার করে, সেটি fixed ২৪-minute ghaṭikā থেকে আলাদা profile হিসেবে নাম দিন।

API ও XML output

{
  "nakshatraAtSunrise": {
    "index": 4,
    "key": "rohini",
    "nameBn": "রোহিণী",
    "pada": 2,
    "nirayanaMoonLongitude": 45.125634,
    "range": { "start": 40.0, "end": 53.3333333333 }
  },
  "boundaries": [
    {
      "endingIndex": 4,
      "startingIndex": 5,
      "julianDayUt": 2461322.265347,
      "localTime": "2026-10-08T23:22:06+06:00"
    }
  ],
  "moonReference": "geocentric",
  "astronomyProfile": "swiss-ephemeris-2.10",
  "ayanamsaProfile": "lahiri",
  "ayanamsaDegrees": 24.219876
}

XML:

<nakshatra-day moon-reference="geocentric"
                 astronomy-profile="swiss-ephemeris-2.10"
                 ayanamsa-profile="lahiri">
  <at-sunrise index="4" key="rohini" pada="2"
              moon-longitude="45.125634">রোহিণী</at-sunrise>
  <boundary ending="4" starting="5"
            jd-ut="2461322.265347"
            local="2026-10-08T23:22:06+06:00" />
</nakshatra-day>

উপরের সংখ্যাগুলো format illustration—production test vector নয়। Raw longitude এবং ayanāṃśa যথেষ্ট decimal precision-এ রাখুন; localized text থেকে data পুনর্গঠন করবেন না।

ঐতিহাসিক নক্ষত্র calculation

Historical result-এ ayanāṃśa ও lunar theory বিশেষ গুরুত্বপূর্ণ। Modern Lahiri/Swiss result এবং classical Surya Siddhanta result-এর নক্ষত্র boundary একই নাও হতে পারে। তুলনা করার সময় প্রকাশ করুন:

  • Moon model এবং edition/version;
  • sidereal zero-point বা ayanāṃśa;
  • mean/true/apparent correction;
  • UT–TT conversion ও ΔT;
  • geocentric/topocentric reference;
  • Julian/Gregorian civil display policy।

Julian বনাম Gregorian date label বদলালেও underlying Julian Day boundary বদলায় না। একই historical instant-কে দুই civil calendar-এ dual label দেওয়া যায়।

সাধারণ implementation error

ভুলফলসংশোধন
Tropical Moon longitude সরাসরি divideসমস্ত নক্ষত্র boundary shiftedChosen ayanāṃśa দিয়ে nirayana longitude
তিথির মতো ayanāṃśa cancel ধরাWrong index/end timeNakshatra uses absolute Moon longitude
360 / 27 integer divisionSector ১৩° হয়ে যায়360.0 / 27.0 বা exact arcseconds
Rounded DMS থেকে indexBoundary-তে name flipRaw double longitude থেকে state
Linear average Moon speedEnd time কয়েক মিনিট/বেশি ভুলEphemeris root solve
359°→0° unwrap না করারেবতী–অশ্বিনী root failAnchor-relative forward arc
Location থাকলেই topocentric MoonStandard Panchanga mismatchGeocentric profile explicit
Abhijit-এর জন্য ৩৬০÷২৮সব ২৭ boundary নষ্টSeparate tradition overlay
Sunrise-only sampleIntermediate transition হারায়Full Vedic-day event scan
Profile ID cache key-তে নেইAyanāṃśa বদলেও stale resultVersioned cache key

Validation checklist

  1. পূর্ণ circle = ১,২৯৬,০০০ arcseconds;
  2. এক নক্ষত্র = ৪৮,০০০ arcseconds;
  3. এক pada = ১২,০০০ arcseconds;
  4. ০° → অশ্বিনী pada ১;
  5. ৩°২০′ → অশ্বিনী pada ২;
  6. ১০° → অশ্বিনী pada ৪;
  7. ১৩°২০′−epsilon → অশ্বিনী;
  8. ১৩°২০′ exact → ভরণী;
  9. ২৬°৪০′ exact → কৃত্তিকা;
  10. ৪০° exact → রোহিণী;
  11. ৫৩°২০′ exact → মৃগশিরা;
  12. ১২০° exact → মঘা;
  13. ২৪০° exact → মূলা;
  14. ৩৪৬°৪০′ exact → রেবতী;
  15. ৩৬০° normalized → অশ্বিনী;
  16. Index সর্বদা ১–২৭;
  17. Pada সর্বদা ১–৪;
  18. ২৭ × ৪ = ১০৮ pada;
  19. প্রতিটি range half-open;
  20. Adjacent ranges gap/overlap নেই;
  21. Tropical minus ayanāṃśa normalized;
  22. Ayanāṃśa exact JD-তে recalculated;
  23. Lahiri mode explicit;
  24. Alternative profile cache পৃথক;
  25. Geocentric flag explicit;
  26. Topocentric experimental profile পৃথক;
  27. Rohini example ৪৫° → pada ২;
  28. রেবতী→অশ্বিনী wrap root;
  29. Boundary bracket verified;
  30. Bisection tolerance ≤ declared precision;
  31. Exact next sunrise boundary next day-এ;
  32. Vedic-day zero-boundary case;
  33. এক-boundary case;
  34. দুই-boundary case;
  35. Intermediate nakshatra export-এ থাকে;
  36. “অহোরাত্র” only when no boundary before next sunrise;
  37. Local time DST-safe conversion;
  38. Post-midnight “নিশা” format;
  39. Clock time ও দণ্ড-পল same instant থেকে;
  40. Language spelling index বদলায় না;
  41. Abhijit standard index-এ ঢোকে না;
  42. Surya Siddhanta known-date regression;
  43. Swiss/Lahiri known-date regression;
  44. Printed Panchanga end-time comparison;
  45. API ও XML একই index/pada/root দেয়;
  46. Historical Julian/Gregorian label JD বদলায় না;
  47. Astronomy, ayanāṃśa ও renderer version output-এ আছে।

উপসংহার

নক্ষত্র গণনার ভিত্তি হলো চন্দ্রের নিরয়ণ geocentric longitude। ৩৬০° sidereal zodiac-কে ২৭টি ১৩°২০′ sector এবং প্রতিটি sector-কে চারটি ৩°২০′ pada-তে ভাগ করা হয়। Moon যে half-open sector-এ আছে সেটিই current নক্ষত্র; next sector boundary-এর root সেই নক্ষত্রের exact end time।

তিথির বিপরীতে নক্ষত্রে ayanāṃśa cancel করে না। তাই Moon ephemeris-এর পাশাপাশি sidereal mode, ayanāṃśa version, geocentric/topocentric choice এবং time scale প্রকাশ করা জরুরি। রেবতী–অশ্বিনী ৩৬০° wrap, exact boundary semantics এবং root-solver tolerance-ও audit trail-এ রাখুন।

শেষে absolute event-কে local sunrise-to-sunrise window-তে বসিয়ে clock time, নিশা এবং দণ্ড-পল render করুন। Calculation core, daily assignment ও language resource আলাদা থাকলে একই engine বাংলা, অসমীয়া বা অন্য ভাষায় নির্ভরযোগ্য Panchanga output দিতে পারবে।

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

  1. Astrodienst—Swiss Ephemeris Programmer’s Documentation; sidereal mode, ayanāṃśa functions, time scale এবং planetary-position interface.
  2. Swiss Ephemeris General Documentation; sidereal ephemerides, predefined ayanāṃśas এবং Lahiri comparison.
  3. Astrodienst—Official Swiss Ephemeris source repository; supported ayanāṃśa modes ও calculation implementation reference.
  4. Nachum Dershowitz ও Edward M. Reingold—Indian Calendrical Calculations; Indian calendrical elements, astronomical models ও sunrise-based day assignment.
  5. Vinod K. Mishra—Calendars of India; ভারতীয় calendrical elements ও modern astronomical terminology.
  6. Positional Astronomy Centre—Rashtriya Panchang; nirayana planetary longitudes, nakṣatra timings এবং official almanac context.
  7. সূর্য সিদ্ধান্ত পঞ্জিকা project specification; Bengali nakṣatra names, sunrise-to-sunrise event scan, দণ্ড-পল display ও versioned calculation profiles.

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