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

চন্দ্রোদয় ও চন্দ্রাস্ত: parallax, upper-limb ও sunrise-day ordering কেন জটিল?

Moonrise/moonset-এ topocentric parallax, lunar semidiameter, upper limb, refraction, no-event date এবং sunrise-to-sunrise ordering-এর C# implementation।

Daily Details-এ “চন্দ্রাস্ত: আজ ১১:০০ PM” এবং “চন্দ্রোদয়: নিশা ২:১৭ AM”—এই দুই event কেবল clock time দিয়ে sort করলে ২:১৭ আগে চলে আসবে। কিন্তু পঞ্জিকা দিবস sunrise থেকে পরের sunrise; তাই absolute instant অনুযায়ী ১১:০০ PM-এর পরে পরদিন ২:১৭ AM। Moonrise calculation ও day-ordering—দুটি সমস্যাই সঠিকভাবে সমাধান করতে হয়।

চন্দ্রোদয় ও চন্দ্রাস্তের standard definition

সাধারণ astronomical almanac-এ Moonrise হলো standard atmosphere ও unobstructed horizon ধরে Moon-এর apparent upper limb horizon-এ ওঠার মুহূর্ত। Moonset হলো upper limb horizon-এর নিচে অদৃশ্য হওয়ার মুহূর্ত। Rashtriya Panchang-ও Moonrise/Moonset-কে upper-limb appearance/disappearance হিসেবে বর্ণনা করে।

এই definition-এ চারটি quantity দরকার:

  • Moon-এর geocentric position;
  • observer-এর latitude, longitude ও elevation;
  • topocentric parallax ও lunar semidiameter;
  • refraction এবং chosen horizon।

Sun-এর −০.৮৩৩৩° threshold Moon-এ ব্যবহার করা যাবে না

Standard solar sunrise-এ Sun center-এর fixed approximate altitude −০.৮৩৩৩° বহুল ব্যবহৃত। Moon-এর ক্ষেত্রে এমন fixed solar threshold ভুল, কারণ horizontal parallax ও apparent semidiameter lunar distance-এর সঙ্গে উল্লেখযোগ্যভাবে বদলায়।

U.S. Naval Observatory-এর Astronomical Almanac convention:

এটি Earth center-referred true zenith distance of lunar center। Refraction ৩৪′, upper-limb semidiameter এবং parallax একই equation-এ ধরা হয়। s ও π dynamic হওয়ায় একটি static center-altitude constant যথেষ্ট নয়।

Horizontal parallax এত গুরুত্বপূর্ণ কেন?

Geocentric direction Earth-এর কেন্দ্র থেকে; topocentric direction observer-এর স্থান থেকে। Moon কাছে হওয়ায় দুই direction-এর angular difference horizon-এর কাছে প্রায় এক degree-এর কাছাকাছি হতে পারে—Sun-এর তুলনায় অনেক বড়।

অর্থাৎ geocentric Moon horizon-এর ওপরে থাকলেও observer-এর topocentric Moon এখনও উঠেনি—এমন হতে পারে। Longitude/latitude বাদ দিয়ে শুধু global Moon position থেকে local rise time পাওয়া যায় না।

Lunar semidiameter কেন প্রতিদিন একই নয়?

Moon-এর orbit elliptical। Perigee-তে Moon কাছে ও apparent disk বড়; apogee-তে দূরে ও ছোট। NASA-র educational material-ও perigee–apogee distance-এর সঙ্গে apparent diameter-এর পরিবর্তন দেখায়। তাই upper-limb event-এ center থেকে limb-এর angular separation dynamic।

একটি production engine-এ:

  • প্রতিটি trial instant-এ Moon distance নিন;
  • সেখান থেকে apparent semidiameter বা library-supplied limb calculation ব্যবহার করুন;
  • mean fixed ১৫′/১৬′ value দিয়ে historical বা precision output force করবেন না।

Lunar mountains ও valleys প্রকৃত limb সামান্য irregular করে। সাধারণ almanac mean limb ব্যবহার করে; eclipse-contact precision-এর মতো lunar topography correction সাধারণ Moonrise report-এ প্রয়োজন হয় না।

Refraction ও upper limb

Atmospheric refraction Moon-কে geometric অবস্থানের চেয়ে ওপরে দেখায়। Upper limb center-এর আগে ওঠে এবং center-এর পরে অস্ত যায়। তাই standard apparent upper-limb profile সাধারণত center/no-refraction profile-এর তুলনায় moonrise আগে ও moonset পরে দেয়।

কিন্তু observed time exact নয়। Horizon-এর pressure, temperature, inversion layer এবং haze refraction বদলাতে পারে। পাহাড়, গাছ বা building থাকলে visible Moonrise theoretical open-horizon time-এর পরে হবে।

চাঁদের phase Moonrise definition বদলায় না

Upper limb বলতে পুরো lunar disk-এর geometric apparent limb—আলোকিত অংশের কিনারা নয়। Crescent-এর upper limb অন্ধকার হলেও standard Moonrise calculation disk-কেই ধরে। U.S. Naval Observatory স্পষ্ট করে যে rise/set definition-এ Moon phase বিবেচিত হয় না।

তাই তিনটি event আলাদা:

Eventঅর্থঅতিরিক্ত শর্ত
MoonriseApparent lunar limb horizon crossingGeometry + refraction
Crescent visibilityচোখে নতুন চাঁদ দেখা সম্ভবElongation, altitude, arc of light, sky brightness, weather
Tithi boundaryMoon–Sun geocentric elongation ১২° boundaryHorizon-এর সঙ্গে সম্পর্ক নেই

Moonrise মানেই crescent দেখা যাবে না; আবার Hijri observational rule-কে Moonrise time alone দিয়ে নির্ধারণ করা যাবে না।

প্রতিদিন “৫০ মিনিট পরে” শুধু গড় ধারণা

Earth ঘুরতে ঘুরতে Moon নিজ orbit-এ পূর্বদিকে এগোয়; তাই একই meridian-এ ফিরতে ২৪ ঘণ্টার চেয়ে বেশি সময় লাগে। Successive moonrise বা moonset-এর interval গড়ে প্রায় ২৫ ঘণ্টা, কিন্তু latitude, declination ও orbital speed অনুযায়ী যথেষ্ট পরিবর্তিত হয়।

ফলে কোনো civil date-এ:

  • একটি Moonrise থাকতে পারে;
  • Moonrise নাও থাকতে পারে;
  • Moonset থাকতে পারে কিন্তু Moonrise না-ও থাকতে পারে;
  • high latitude-এ continuous-above/below বা unusual sequence হতে পারে।

USNO yearly table-এ blank Moonrise/Moonset cell বৈধ, কারণ successive event-এর interval ২৪ ঘণ্টার চেয়ে দীর্ঘ হতে পারে। “আগের দিনের সময় + ৫০ মিনিট” production algorithm নয়।

Civil date নয়—sunrise থেকে next sunrise scan

Panchanga day:

এ interval civil midnight অতিক্রম করে। তাই Moon events absolute UTC/JD instant দিয়ে filter ও sort করুন। Local TimeOfDay sort ভুল:

// ভুল: 02:17 AM-কে 11:00 PM-এর আগে বসাবে
events.OrderBy(x => x.LocalTime.TimeOfDay);

// সঠিক
events.OrderBy(x => x.InstantUtc);

একটি Vedic day-এ Moonset আগে এবং Moonrise পরে হতে পারে; phase অনুযায়ী Moonrise আগে ও Moonset পরে-ও হতে পারে। Fixed “rise তারপর set” order ধরে template বানাবেন না।

Location, horizon ও elevation

Moonrise/Moonset location-specific। Request profile-এ রাখুন:

  • latitude ও longitude;
  • observer elevation;
  • time-zone ID;
  • disc definition;
  • refraction/atmosphere policy;
  • ideal না true local horizon।

Elevation horizon dip-এর কারণে open landscape-এ Moonrise আগে ও Moonset পরে হতে পারে। কিন্তু eastern hill Moonrise delay করতে পারে। একটি single elevation value terrain skyline-এর বিকল্প নয়।

পঞ্জিকায় Moonrise/Moonset-এর ভূমিকা

Moonrise একটি local observational event; তিথি geocentric angular event। তবু practice rule-এ Moonrise গুরুত্বপূর্ণ হতে পারে—যেমন কোনো vrata-তে চন্দ্রদর্শন বা Moonrise-পরবর্তী আচার। Production architecture:

  1. Astronomy layer exact Moon rise/set event দেয়;
  2. Vedic-day layer sunrise span-এ events assign করে;
  3. Festival policy relevant event নির্বাচন করে;
  4. Language layer “আজ”, “নিশা”, “পরদিন” render করে।

Festival rule astronomy engine-এর মধ্যে hard-code করবেন না। একই Moonrise data বিভিন্ন tradition আলাদাভাবে interpret করতে পারে।

এই project-এর Moon profile

আপনার app-এর current convention: Moon edge/apparent—অর্থাৎ apparent lunar limb এবং refraction-aware local event। এটি বজায় রেখে একটি explicit profile key দিন:

moonRiseSetProfile = "moon-upper-limb-apparent";
moonRiseSetProfileVersion = "1.0";
PresetDiscRefractionব্যবহার
moon-upper-limb-apparentUpper limbStandardPrimary daily Panchanga display
moon-center-geometricCenterNoneResearch comparison only
moon-upper-limb-true-horizonUpper limbMeasured/standardTerrain-aware observation

C# 5-compatible data model

public enum MoonEventKind
{
    Rise,
    Set
}

public enum LunarDiscDefinition
{
    UpperLimb,
    Center,
    LowerLimb
}

public enum LunarRefractionMode
{
    Standard,
    None,
    MeasuredAtmosphere
}

public sealed class LunarRiseSetProfile
{
    public string Key { get; set; }
    public string Version { get; set; }
    public LunarDiscDefinition Disc { get; set; }
    public LunarRefractionMode Refraction { get; set; }
    public double PressureHpa { get; set; }
    public double TemperatureC { get; set; }
    public double ObserverElevationMeters { get; set; }
    public double HorizonAltitudeDegrees { get; set; }
}

public sealed class MoonHorizonEvent
{
    public MoonEventKind Kind { get; set; }
    public DateTimeOffset InstantUtc { get; set; }
    public DateTimeOffset LocalTime { get; set; }
    public double JulianDayUt { get; set; }
    public int LocalDateOffset { get; set; }
    public string ProfileKey { get; set; }
}

public sealed class MoonSearchResult
{
    public bool Found { get; set; }
    public DateTimeOffset InstantUtc { get; set; }
    public double JulianDayUt { get; set; }
    public string Status { get; set; }
    public int NativeReturnCode { get; set; }
    public string NativeMessage { get; set; }
}

public sealed class VedicDayMoonReport
{
    public DateTime LocalAnchorDate { get; set; }
    public DateTimeOffset SunriseUtc { get; set; }
    public DateTimeOffset NextSunriseUtc { get; set; }
    public IList<MoonHorizonEvent> Events { get; set; }
    public bool HasMoonrise { get; set; }
    public bool HasMoonset { get; set; }
}

Swiss Ephemeris flags

swe_rise_trans() Moon-সহ planets ও stars-এর rise/set গণনা করে। Default behavior apparent upper limb/refraction profile-এর জন্য উপযোগী। C# wrapper অনুযায়ী constant নাম adapt করুন:

static int BuildMoonRiseSetMode(
    MoonEventKind kind,
    LunarRiseSetProfile profile)
{
    int mode = kind == MoonEventKind.Rise
        ? SweConst.SE_CALC_RISE
        : SweConst.SE_CALC_SET;

    if (profile.Disc == LunarDiscDefinition.Center)
        mode |= SweConst.SE_BIT_DISC_CENTER;
    else if (profile.Disc == LunarDiscDefinition.LowerLimb)
        mode |= SweConst.SE_BIT_DISC_BOTTOM;

    if (profile.Refraction == LunarRefractionMode.None)
        mode |= SweConst.SE_BIT_NO_REFRACTION;

    return mode;
}

Primary moon-upper-limb-apparent preset-এ disc-center বা no-refraction bit যোগ করবেন না। SE_BIT_HINDU_RISING Sun-এর Hindu sunrise preset; Moon profile-এ অন্ধভাবে reuse করবেন না। Moon body ID, geoposition এবং correct pressure/temperature পাঠান।

static LunarRiseSetProfile PrimaryMoonProfile()
{
    return new LunarRiseSetProfile
    {
        Key = "moon-upper-limb-apparent",
        Version = "1.0",
        Disc = LunarDiscDefinition.UpperLimb,
        Refraction = LunarRefractionMode.Standard,
        PressureHpa = 0.0,       // Engine default/estimated pressure
        TemperatureC = 15.0,
        ObserverElevationMeters = 0.0,
        HorizonAltitudeDegrees = 0.0
    };
}

Swiss documentation অনুযায়ী pressure ০ দিলে engine altitude/temperature থেকে estimate করতে পারে; wrapper behavior যাচাই করে profile note-এ লিখুন। Native return code event-not-found/error হলে unrepresentable DateTime বানাবেন না।

Sunrise-to-sunrise Moon event scanner

একটি adapter next rise বা set absolute instant ফেরত দেবে:

public interface IMoonHorizonCalculator
{
    MoonSearchResult FindNextMoonEventUtc(
        DateTimeOffset searchFromUtc,
        MoonEventKind kind,
        DesktopLocation location,
        LunarRiseSetProfile profile);
}

তারপর rise ও set independently scan করে merge/sort করুন:

public static IList<MoonHorizonEvent> ScanMoonEvents(
    DateTime anchorDate,
    DateTimeOffset sunriseUtc,
    DateTimeOffset nextSunriseUtc,
    DesktopLocation location,
    LunarRiseSetProfile profile,
    IMoonHorizonCalculator calculator)
{
    var result = new List<MoonHorizonEvent>();
    MoonEventKind[] kinds =
    {
        MoonEventKind.Rise,
        MoonEventKind.Set
    };

    TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById(
        location.TimeZoneId);

    foreach (MoonEventKind kind in kinds)
    {
        DateTimeOffset cursor = sunriseUtc.AddSeconds(-1.0);

        for (int safety = 0; safety < 4; safety++)
        {
            MoonSearchResult found = calculator.FindNextMoonEventUtc(
                cursor, kind, location, profile);

            if (!found.Found)
                break;

            DateTimeOffset instant = found.InstantUtc.ToUniversalTime();
            if (instant >= nextSunriseUtc)
                break;

            if (instant >= sunriseUtc)
            {
                DateTimeOffset local = TimeZoneInfo.ConvertTime(
                    instant, zone);

                result.Add(new MoonHorizonEvent
                {
                    Kind = kind,
                    InstantUtc = instant,
                    LocalTime = local,
                    JulianDayUt = found.JulianDayUt,
                    LocalDateOffset =
                        (local.Date - anchorDate.Date).Days,
                    ProfileKey = profile.Key
                });
            }

            cursor = instant.AddSeconds(1.0);
        }
    }

    return result
        .OrderBy(x => x.InstantUtc)
        .ThenBy(x => x.Kind)
        .ToList();
}

sunriseUtc.AddSeconds(-1) exact sunrise event include করার জন্য। Adapter strict-after semantics দিলে এটি কাজ করবে; adapter inclusive হলে duplicate guard যোগ করুন। Safety limit accidental infinite loop থামায়—normal latitude-এ limit hit করা expected নয়।

Report তৈরি

public static VedicDayMoonReport BuildMoonReport(
    DateTime localAnchorDate,
    DateTimeOffset sunriseUtc,
    DateTimeOffset nextSunriseUtc,
    DesktopLocation location,
    LunarRiseSetProfile profile,
    IMoonHorizonCalculator calculator)
{
    IList<MoonHorizonEvent> events = ScanMoonEvents(
        localAnchorDate,
        sunriseUtc,
        nextSunriseUtc,
        location,
        profile,
        calculator);

    return new VedicDayMoonReport
    {
        LocalAnchorDate = localAnchorDate,
        SunriseUtc = sunriseUtc,
        NextSunriseUtc = nextSunriseUtc,
        Events = events,
        HasMoonrise = events.Any(x => x.Kind == MoonEventKind.Rise),
        HasMoonset = events.Any(x => x.Kind == MoonEventKind.Set)
    };
}

“আজ”, “নিশা” ও “পরদিন” display

Clock time-এর সঙ্গে date relation দেখান:

static string MoonEventDayLabel(MoonHorizonEvent value)
{
    if (value.LocalDateOffset < 0) return "আগের দিন";
    if (value.LocalDateOffset == 0) return "আজ";
    if (value.LocalDateOffset == 1) return "পরদিন";
    return "দিন +" + value.LocalDateOffset.ToString(
        CultureInfo.InvariantCulture);
}

static string MoonEventNameBn(MoonEventKind kind)
{
    return kind == MoonEventKind.Rise
        ? "চন্দ্রোদয়"
        : "চন্দ্রাস্ত";
}

Post-midnight কিন্তু next sunrise-এর আগের event-এ আপনার existing style অনুযায়ী নিশা যোগ করা যায়:

চন্দ্রাস্ত: আজ রাত ১১:০০
চন্দ্রোদয়: পরদিন নিশা ২:১৭

যদি Vedic span-এ Moonrise না থাকে, “চন্দ্রোদয়: এই পঞ্জিকা দিবসে নেই” দেখান। পরের event চাইলে আলাদা informative field দিন—current day-এর event হিসেবে ঢোকাবেন না।

Time zone ও DST

Rise/set geometry UT/JD-তে solve হয়; time zone কেবল local display এবং local-date offset নির্ধারণ করে। DST-এর কারণে:

  • local clock label বদলায়;
  • same UTC interval-এর wall-clock duration বদলাতে পারে;
  • LocalDateOffset event-এর actual zone conversion-এর পরে হিসাব করতে হবে;
  • fixed offset দিয়ে New York historical/future output করা উচিত নয়।

Moonrise search seed local midnight থেকে বানিয়ে fixed offset subtract করার বদলে Vedic span-এর already-resolved UTC boundary ব্যবহার করা নিরাপদ।

Historical Moonrise/Moonset

Early historical calculation-এ internal JD রাখুন। .NET DateTime-এ intermediate conversion করলে year-range ও Julian/Gregorian reform সমস্যা হতে পারে। Export metadata:

  • JD UT of each event;
  • Moon ephemeris/version ও ΔT policy;
  • latitude, longitude, elevation;
  • historical time-zone/LMT profile;
  • limb/refraction/horizon profile;
  • Julian/Gregorian display calendar।

Historical atmosphere ও terrain জানা না থাকলে output হলো conventional computed Moonrise—not guaranteed eyewitness time। Seconds দেখালেও uncertainty note দিন।

No-rise, no-set ও continuously-above cases

High latitude-এ Moon-এর declination ও horizon geometry অনুযায়ী:

MoonriseNotFoundInSpan
MoonsetNotFoundInSpan
MoonContinuouslyAboveHorizon
MoonContinuouslyBelowHorizon
NativeCalculationError

প্রথম দুটি normal no-event result; শেষটি calculation error। একই message-এ মিশিয়ে ফেললে user বুঝতে পারবেন না blank field বৈধ, না engine ব্যর্থ হয়েছে।

API ও XML output

{
  "anchorDate": "2026-10-09",
  "vedicDay": {
    "sunrise": "2026-10-09T05:55:02+06:00",
    "nextSunrise": "2026-10-10T05:55:24+06:00"
  },
  "moonProfile": {
    "key": "moon-upper-limb-apparent",
    "version": "1.0",
    "disc": "upper-limb",
    "refraction": "standard"
  },
  "events": [
    {
      "kind": "set",
      "local": "2026-10-09T23:00:18+06:00",
      "dayOffset": 0
    },
    {
      "kind": "rise",
      "local": "2026-10-10T02:17:41+06:00",
      "dayOffset": 1,
      "vedicLabel": "নিশা"
    }
  ]
}

উপরের সময়গুলো ordering-format example; astronomical test vector নয়। XML:

<moon-events anchor-date="2026-10-09"
             profile="moon-upper-limb-apparent"
             profile-version="1.0">
  <span sunrise="2026-10-09T05:55:02+06:00"
        next-sunrise="2026-10-10T05:55:24+06:00" />
  <event kind="set" local="2026-10-09T23:00:18+06:00"
         day-offset="0" />
  <event kind="rise" local="2026-10-10T02:17:41+06:00"
         day-offset="1" vedic-label="নিশা" />
</moon-events>

Daily XML-এর <tithi> block-এ rendered rise/set text রাখতে পারেন; research API-তে event list ও profile metadata আলাদা রাখাই ভালো।

সাধারণ implementation error

ভুলফলসংশোধন
Solar −০.৮৩৩৩° Moon-এParallax/semidiameter mismatchBody-aware lunar solver
Geocentric altitude-ই local Moonriseবড় timing errorTopocentric parallax
Fixed lunar semidiameterPerigee/apogee variation হারায়Dynamic Moon distance
Illuminated crescent limbPhase-dependent false riseFull apparent disk limb
আগের দিন +৫০ মিনিটDeclination/orbital-speed errorপ্রতিটি event solve
Clock-time sortingPost-midnight order উল্টোUTC/JD sorting
Civil midnight windowVedic day event missingSunrise-to-next-sunrise interval
Always rise-before-set templatePhase-dependent sequence ভুলChronological event list
Blank মানেই errorValid no-event date rejectedExplicit status
Sun Hindu flag Moon-এUnintended center/no-refractionSeparate Moon profile
Moonrise = crescent visibilityHijri rule ভুলDedicated visibility model
DateTime.MinValue fallbackEarly-year exceptionFound/status result

Validation checklist

  1. Primary profile upper limb + standard refraction;
  2. Center/no-refraction comparison profile;
  3. Upper-limb rise center-rise-এর আগে;
  4. Upper-limb set center-set-এর পরে;
  5. Dynamic horizontal parallax;
  6. Dynamic lunar semidiameter;
  7. Perigee test;
  8. Apogee test;
  9. USNO (90°34′ + s - π) reference check;
  10. No solar −০.৮৩৩৩° reuse;
  11. Topocentric location applied;
  12. Dhaka regression;
  13. Kolkata regression;
  14. New York regression;
  15. Same instant, different longitude;
  16. Elevation test;
  17. Positive terrain horizon test;
  18. Pressure default documented;
  19. Temperature variation path;
  20. Phase does not change limb definition;
  21. Dark upper limb accepted;
  22. New Moon vicinity;
  23. First-quarter sequence;
  24. Full Moon vicinity;
  25. Last-quarter sequence;
  26. Moonrise-only Vedic day;
  27. Moonset-only Vedic day;
  28. Both events;
  29. No Moonrise in span;
  30. No Moonset in span;
  31. Moonset-before-Moonrise order;
  32. Moonrise-before-Moonset order;
  33. Post-midnight event dayOffset=1;
  34. Absolute instant sorting;
  35. Exact sunrise event included;
  36. Exact next-sunrise event excluded;
  37. No duplicate after one-second cursor advance;
  38. Inclusive adapter duplicate guard;
  39. Safety limit not reached normally;
  40. DST spring transition;
  41. DST fall transition;
  42. Historic LMT profile;
  43. Early year internal JD;
  44. Julian/Gregorian labels same event JD;
  45. Polar continuously-above status;
  46. Polar continuously-below status;
  47. Native error separate from no-event;
  48. No DateTime.MinValue fallback;
  49. HTML/API/XML event order identical;
  50. Profile/version cache key-তে;
  51. Comparison with USNO/printed Panchanga matching profile।

উপসংহার

Moonrise/Moonset একটি local topocentric horizon event। Moon কাছাকাছি বলে parallax বড়; orbit elliptical বলে parallax ও semidiameter বদলায়। তাই fixed solar threshold বা আগের দিনের সময়ে ৫০ মিনিট যোগ করে নির্ভরযোগ্য ফল পাওয়া যায় না।

Standard apparent event-এ full lunar disk-এর upper limb, refraction এবং dynamic parallax/semidiameter ব্যবহার করুন—Moon phase নয়। কোনো civil date বা Vedic day-এ Moonrise না থাকাও স্বাভাবিক বৈধ ফল।

আপনার Daily Details-এ sunrise-to-next-sunrise interval নিয়ে rise ও set independently search, UTC/JD instant-এ merge/sort এবং local date offset দিয়ে “আজ/পরদিন/নিশা” render করলে event order স্থিতিশীল থাকবে। Current moon-upper-limb-apparent profile স্পষ্টভাবে version করলে printed Panchanga comparison-ও পুনরুৎপাদনযোগ্য হবে।

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

  1. U.S. Naval Observatory—Rise, Set and Twilight Definitions; lunar upper limb, phase-independent disk এবং no-event date.
  2. U.S. Naval Observatory—Astronomical Almanac Glossary; Moonrise zenith-distance formula (90°34′ + s - π).
  3. USNO—Rise/Set/Transit Times; successive Moon events-এর প্রায় ২৫ ঘণ্টা interval ও blank date explanation.
  4. Swiss Ephemeris Programmer’s Documentation; Moon/planet rise-set, disc, refraction ও true-horizon functions.
  5. Positional Astronomy Centre—Rashtriya Panchang Explanation; Moonrise/Moonset upper-limb convention.
  6. NASA Science—Near and Far; perigee/apogee-তে Moon-এর apparent-size change.
  7. NASA Science—Moon Facts; lunar size, distance ও orbit background.
  8. সূর্য সিদ্ধান্ত পঞ্জিকা project specification; Moon edge/apparent profile এবং sunrise-to-next-sunrise ordering.

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