গণনাপদ্ধতি · সময় ও লগ্ন · প্রবন্ধ ৩৬
ইষ্টকাল, স্থানীয় মধ্যাহ্ন ও লগ্ন: জন্মসময়কে রাশি চক্রে কীভাবে স্থাপন করা হয়?
একটি জন্মসময় কেবল ঘড়ির সংখ্যা নয়। সেটি কোন শহরের, কোন time zone-এর, daylight-saving চলছিল কি না, এবং কোন calendar label ব্যবহৃত হয়েছে—সব নির্ধারণের পরেই মুহূর্তটি আকাশের ঘূর্ণনের সঙ্গে যুক্ত হয়। এই প্রবন্ধে civil input থেকে নিরয়ণ লগ্ন ও ভাবচালিত চক্র পর্যন্ত সম্পূর্ণ reproducible pipeline দেখানো হয়েছে।
এক বাক্যে মূলনীতি: ইষ্টকাল হলো নির্বাচিত সূর্যোদয় থেকে জন্মমুহূর্ত পর্যন্ত elapsed time; কিন্তু লগ্নের astronomical calculation করতে exact UT Julian Day, geographic latitude ও longitude প্রয়োজন।
একই জন্মের সঙ্গে তিন ধরনের সময়
জন্মছক তৈরির সময় তিনটি আলাদা ধারণা প্রায়ই এক নামে ব্যবহার করা হয়। এগুলো আলাদা না রাখলে result মিলবে না।
| সময় | অর্থ | প্রধান ব্যবহার |
|---|---|---|
| Civil time | ঘড়িতে লেখা local date ও time; time-zone/DST-সহ | User input ও display |
| ইষ্টকাল | সংশ্লিষ্ট সূর্যোদয় থেকে elapsed সময়, সাধারণত দণ্ড-পল-বিপলে | প্রাচীন table-based পদ্ধতি ও printed record |
| Sidereal time | নক্ষত্রপটের তুলনায় পৃথিবীর ঘূর্ণনের angular measure | লগ্ন, MC ও house cusp |
এই তিনটির মধ্যে সরাসরি substitution করা যায় না। যেমন সকাল ১০টা civil time-কে শুধু ২৪ মিনিটে ভাগ করলে একটি দণ্ড-পল সংখ্যা পাওয়া যায়, কিন্তু সেটি ইষ্টকাল নয়—কারণ স্থানীয় সূর্যোদয় বাদ দিতে হবে। আবার ইষ্টকালকে longitude correction ছাড়া sidereal time ভাবাও ভুল।
পূর্ণ calculation pipeline
- Local date, clock time, location ও IANA/Windows time-zone গ্রহণ করুন;
- DST ambiguity/invalid time সমাধান করে একটি
DateTimeOffsetinstant তৈরি করুন; - Instant-টি UTC এবং Julian Day UT-তে রূপান্তর করুন;
- ঐ location-এর sunrise গণনা করে ইষ্টকালের anchor নির্ধারণ করুন;
- UTC/JD থেকে Greenwich sidereal time এবং longitude যোগ করে local sidereal time নির্ণয় করুন;
- Latitude, local sidereal time ও true obliquity দিয়ে tropical Ascendant/MC নির্ণয় করুন;
- নির্বাচিত sidereal mode—এই project-এ Lahiri—প্রয়োগ করে nirayana lagna নিন;
- নির্বাচিত house system অনুসারে ১২টি cusp, madhya ও sandhi নির্ণয় করুন;
- একই reference profile ও raw longitude থেকে chart, table, API এবং XML render করুন।
গুরুত্বপূর্ণ: Time-zone offset, latitude এবং longitude একই ধরনের input নয়। Kolkata ও Dhaka-র clock offset কখনও একই হতে পারে, কিন্তু longitude আলাদা হওয়ায় একই instant-এ তাদের local sidereal time ও লগ্ন আলাদা হবে।
Civil time থেকে একটিমাত্র exact instant
“৮ অক্টোবর ২০২৬, সকাল ১০টা” নিজে একটি পূর্ণ astronomical instant নয়। Location/zone না দিলে একই clock label পৃথিবীর বিভিন্ন স্থানে বিভিন্ন UTC instant বোঝায়। তাই calculation input-এ অন্তত নিচের data রাখতে হবে:
- Local calendar date এবং clock time;
- Time-zone ID—যেমন
India Standard Time,Bangladesh Standard TimeবাEastern Standard Time; - UTC offset used at that instant;
- Latitude—উত্তর positive, দক্ষিণ negative;
- Longitude—পূর্ব positive, পশ্চিম negative;
- Calendar label—proleptic Gregorian, Julian অথবা historical civil label;
- Input precision—exact, rounded, estimated বা unknown.
DST-এর দুই বিপদ
Invalid local time: Spring-forward-এর সময় কোনো কোনো clock interval অস্তিত্বই রাখে না। Ambiguous local time: Fall-back-এর সময় একই local label দুবার ঘটে। এই ক্ষেত্রে software-এর নিজের মতো offset বেছে নেওয়া উচিত নয়; user-কে আগে/পরে occurrence নির্বাচন করাতে হবে।
ইষ্টকাল: কোন সূর্যোদয় থেকে?
ইষ্টকাল বা iṣṭakāla সাধারণত জন্মের সংশ্লিষ্ট সাবন দিনের সূর্যোদয় থেকে জন্মমুহূর্ত পর্যন্ত elapsed time।
ইষ্টকাল (seconds) = জন্মমুহূর্ত UTC − anchor sunrise UTC
Fixed দণ্ড = ইষ্টকাল seconds ÷ ১৪৪০
জন্ম যদি আজকের সূর্যোদয়ের আগে হয়, anchor হবে আগের civil date-এর সূর্যোদয়। ফলে রাত ২টার জন্মের ইষ্টকাল মধ্যরাতে শূন্য হয় না; আগের sunrise থেকে চলতে থাকে। এটি পঞ্জিকার “নিশা” convention-এর সঙ্গেও সামঞ্জস্যপূর্ণ।
| জন্মমুহূর্ত | ইষ্টকাল anchor | সাবন দিন |
|---|---|---|
| Sunrise-এর ঠিক পরে | একই civil date-এর sunrise | নতুন দিন |
| দুপুর বা সন্ধ্যা | একই civil date-এর sunrise | একই দিন |
| মধ্যরাতের পরে, next sunrise-এর আগে | আগের civil date-এর sunrise | আগের sunrise-day |
| ঠিক next sunrise | নতুন sunrise | পরের দিন; ইষ্টকাল ০ |
Sunrise calculation profile-ও metadata-তে রাখতে হবে—Sun center না upper limb, refraction on/off, elevation এবং pressure/temperature model। Profile বদলালে ইষ্টকাল বদলাবে; exact birth instant বদলাবে না।
Zone noon, mean noon এবং apparent solar noon
ঘড়িতে ১২টা বাজলেই সূর্য স্থানীয় meridian পার হয় না। তিনটি noon আলাদা:
- Zone noon: Time-zone clock-এর 12:00;
- Local mean noon: ঐ longitude-এর mean solar time 12:00;
- Apparent solar noon: সূর্যের বাস্তব meridian transit-এর instant।
Local mean solar time-এর সহজ relation:
LMT hours = UTC hours + longitude ÷ ১৫
পূর্ব longitude positive; পশ্চিম longitude negative.
Zone meridian থেকে প্রতি ১° longitude পার্থক্যে mean solar clock প্রায় ৪ মিনিট সরে। কিন্তু apparent noon পেতে equation of time-ও ধরতে হয়। সবচেয়ে নিরাপদ পদ্ধতি হলো ephemeris transit function দিয়ে স্থানীয় Sun meridian crossing নির্ণয় করা।
লগ্নের জন্য noon দরকার? না। Noon একটি useful diagnostic ও traditional reference; লগ্ন সরাসরি exact UT/JD এবং location থেকে গণনা করা যায়।
Greenwich ও local sidereal time
Sidereal time সূর্যঘড়ি নয়; এটি নক্ষত্রপটের তুলনায় পৃথিবীর rotation angle-এর একটি time-like প্রকাশ। Modern calculation-এ UT1 এবং TT-এর যথাযথ astronomical relation ব্যবহার করা উত্তম। সাধারণ educational approximation-এ UTC-কে UT1-এর কাছাকাছি ধরা হলেও production ephemeris library ব্যবহার করাই নিরাপদ।
Local sidereal angle = Greenwich sidereal angle + geographic longitude
Result-টি ০°–৩৬০° বা ০–২৪ sidereal hour-এ normalize করুন।
Longitude-এর sign উল্টে গেলে লগ্নে বড় ভুল হয়। এই project-এর convention:
- Kolkata ≈ +88.35°;
- Dhaka ≈ +90.4125°;
- New York ≈ −74.006°.
U.S. Naval Observatory-এর approximate GMST expression UT Julian date থেকে Greenwich sidereal time নির্ণয় করে; high-precision production code-এ Swiss Ephemeris বা IAU SOFA routine ব্যবহার করা ভালো।
Ascendant বা জন্মলগ্ন কী?
Ascendant হলো নির্দিষ্ট instant ও location-এ eastern horizon যেখানে ecliptic-কে ছেদ করে সেই zodiac longitude। এটি কেবল “প্রতি দুই ঘণ্টায় একটি রাশি” নয়। Latitude, obliquity ও season-এর কারণে signs-এর rising time অসমান।
Manual tropical approximation-এ local sidereal angle θ, geographic latitude φ এবং ecliptic obliquity ε থেকে:
λ0 = atan2(−cos θ, sin θ · cos ε + tan φ · sin ε)
λAsc = normalize(λ0 + ১৮০°)
প্রথম result-কে ০°–৩৬০°-এ normalize করার পর opposite intersection নিয়ে eastern rising point নির্বাচন করতে হয়।
এই formula শিক্ষামূলক cross-check হিসেবে উপযোগী। Production result-এর জন্য nutation, true equator/equinox এবং polar cases সামলাতে Swiss Ephemeris house function ব্যবহার করুন। Swiss Ephemeris Ascendant-কে সবসময় ecliptic-এর eastern rising point হিসেবে অগ্রাধিকার দেয়।
জন্মসময়ের precision কেন গুরুত্বপূর্ণ?
পৃথিবীর rotation-এর কারণে কয়েক মিনিটের time error-এ Ascendant degree লক্ষণীয়ভাবে সরে যেতে পারে; sign boundary বা house cusp-এর কাছে ফলও বদলাতে পারে। “লগ্ন প্রতি চার মিনিটে ঠিক এক degree” কেবল একটি rough average—সব latitude ও sign-এ সমান নয়। তাই estimated birth time-কে exact বলে প্রকাশ করা উচিত নয়।
Tropical থেকে nirayana: ayanāṃśa profile
Tropical longitude equinox of date-এর সঙ্গে যুক্ত; nirayana বা sidereal longitude একটি নির্বাচিত fixed-star reference অনুযায়ী ayanāṃśa প্রয়োগ করে। এই project-এর Swiss-Ephemeris profile হলো Lahiri।
শুধু একটি point-এর explanatory relation:
Nirayana longitude = normalize(tropical longitude − ayanāṃśa)
তবে পূর্ণ house cusp-এর জন্য tropical cusp থেকে নিজে নিজে ayanāṃśa বাদ দেওয়ার বদলে library-এর sidereal house mode ব্যবহার করুন। Swiss Ephemeris-এ প্রথমে swe_set_sid_mode(), তারপর swe_houses_ex()-এ sidereal flag দিতে হয়।
Profile label আবশ্যক: “নিরয়ণ লগ্ন” একাই যথেষ্ট নয়। Output-এ ayanāṃśa name, value, ephemeris version, house system এবং coordinate convention লিখুন। Lahiri, Raman বা অন্য mode বদলালে degree এবং কখনও sign-ও বদলাতে পারে।
লগ্ন, রাশি চক্র ও ভাবচালিত চক্র এক নয়
রাশি চক্রে প্রতিটি sign ৩০°। কিন্তু ভাবচালিত চক্র selected house system-এর cusp ও sandhi অনুযায়ী ভাগ হয়। তাই কোনো গ্রহ যে রাশিতে আছে, সে অবশ্যই একই নম্বর ভাবেও থাকবে—এমন নয়।
| বস্তু | কী দেখায় | পরিবর্তনের কারণ |
|---|---|---|
| রাশি চক্র | ১২টি সমান ৩০° zodiac sign-এ গ্রহ | Ayanāṃśa ও planetary longitude |
| লগ্ন | Eastern horizon-এর ecliptic longitude | Time, latitude, longitude |
| ভাবমধ্য/cusp | ১২ ভাবের reference point | House system, LST, latitude |
| ভাবসন্ধি | Adjacent ভাবের boundary | Selected sandhi rule |
| ভাবচালিত | Boundary অনুসারে গ্রহের ভাবস্থিতি | Cusp/sandhi এবং গ্রহের longitude |
ConversionTools.aspx-এ তাই Nirayana Lagna, Nirayana MC ও Ayanāṃśa-র সঙ্গে প্রতিটি ভাবের start sandhi, madhya, end sandhi এবং planets আলাদাভাবে দেখানো উচিত।
C# 5 implementation
নিচের code framework-টি আপনার .NET Framework/C# 5 application-এর জন্য। Swiss Ephemeris wrapper-এর class বা constant name আপনার project অনুযায়ী সামান্য বদলাতে হতে পারে।
১. Input model
public sealed class LagnaRequest
{
public DateTime LocalClock { get; set; } // Kind = Unspecified
public string TimeZoneId { get; set; }
public TimeSpan? ChosenUtcOffset { get; set; } // DST overlap হলে required
public double Latitude { get; set; }
public double Longitude { get; set; } // East +, West -
public string AyanamsaName { get; set; }
public char HouseSystem { get; set; }
}
public sealed class LagnaResult
{
public DateTimeOffset Instant { get; set; }
public double JulianDayUt { get; set; }
public double NirayanaLagna { get; set; }
public double NirayanaMc { get; set; }
public double Ayanamsa { get; set; }
public double[] Cusps { get; set; }
public TimeSpan IshtaKala { get; set; }
public DateTimeOffset AnchorSunrise { get; set; }
}
২. Local clock resolve করুন
static DateTimeOffset ResolveLocalClock(LagnaRequest r)
{
TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById(r.TimeZoneId);
DateTime local = DateTime.SpecifyKind(r.LocalClock, DateTimeKind.Unspecified);
if (zone.IsInvalidTime(local))
throw new ArgumentException(
"এই local time DST spring-forward gap-এর মধ্যে পড়েছে।");
if (zone.IsAmbiguousTime(local))
{
TimeSpan[] choices = zone.GetAmbiguousTimeOffsets(local);
if (!r.ChosenUtcOffset.HasValue ||
Array.IndexOf(choices, r.ChosenUtcOffset.Value) < 0)
throw new ArgumentException(
"এই local time দুইবার ঘটেছে; UTC offset নির্বাচন করুন।");
return new DateTimeOffset(local, r.ChosenUtcOffset.Value);
}
return new DateTimeOffset(local, zone.GetUtcOffset(local));
}
৩. UTC instant থেকে Julian Day
static double ToJulianDayUt(DateTimeOffset instant)
{
DateTime epoch = new DateTime(
1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return 2440587.5 + (instant.UtcDateTime - epoch).TotalDays;
}
এই helper proleptic Gregorian DateTime input ধরে। Historical Julian label থাকলে আগে calendar-aware converter দিয়ে astronomical JD তৈরি করুন; label-কে Gregorian constructor-এ সরাসরি দেবেন না।
৪. Sunrise anchor ও ইষ্টকাল
static TimeSpan CalculateIshtaKala(
DateTimeOffset birth,
DateTimeOffset sunriseOnCivilDate,
DateTimeOffset sunrisePreviousDate,
out DateTimeOffset anchor)
{
anchor = birth >= sunriseOnCivilDate
? sunriseOnCivilDate
: sunrisePreviousDate;
TimeSpan value = birth.ToUniversalTime() - anchor.ToUniversalTime();
if (value < TimeSpan.Zero || value.TotalHours > 27.0)
throw new InvalidOperationException("ইষ্টকাল anchor যাচাই করুন।");
return value;
}
৫. Carry-safe দণ্ড-পল-বিপল
static string FormatIshtaKala(TimeSpan elapsed)
{
// ১ দণ্ড = ১৪৪০ sec; ১ পল = ২৪ sec; ১ বিপল = ০.৪ sec
long totalHundredthsOfVipala = (long)Math.Round(
elapsed.TotalSeconds * 250.0,
MidpointRounding.AwayFromZero);
const long perPala = 6000L;
const long perDanda = 360000L;
long danda = totalHundredthsOfVipala / perDanda;
long rem = totalHundredthsOfVipala % perDanda;
long pala = rem / perPala;
rem %= perPala;
long vipala = rem / 100L;
long fraction = rem % 100L;
return String.Format(
CultureInfo.InvariantCulture,
"{0}/{1:00}/{2:00}.{3:00}",
danda, pala, vipala, fraction);
}
৬. Swiss Ephemeris দিয়ে sidereal houses
static LagnaResult CalculateLagna(
LagnaRequest r,
DateTimeOffset sunriseToday,
DateTimeOffset sunrisePrevious,
SwissEph swe)
{
if (r.Latitude < -90.0 || r.Latitude > 90.0)
throw new ArgumentOutOfRangeException("Latitude");
if (r.Longitude < -180.0 || r.Longitude > 180.0)
throw new ArgumentOutOfRangeException("Longitude");
DateTimeOffset instant = ResolveLocalClock(r);
double jdUt = ToJulianDayUt(instant);
// Project profile: Lahiri nirayana.
swe.swe_set_sid_mode(SwissEph.SE_SIDM_LAHIRI, 0.0, 0.0);
double[] cusps = new double[13];
double[] ascmc = new double[10];
int flags = SwissEph.SEFLG_SIDEREAL;
int status = swe.swe_houses_ex(
jdUt, flags, r.Latitude, r.Longitude,
r.HouseSystem, cusps, ascmc);
if (status < 0)
throw new InvalidOperationException("House calculation failed.");
DateTimeOffset anchor;
TimeSpan ishta = CalculateIshtaKala(
instant, sunriseToday, sunrisePrevious, out anchor);
return new LagnaResult {
Instant = instant,
JulianDayUt = jdUt,
NirayanaLagna = Normalize360(ascmc[0]),
NirayanaMc = Normalize360(ascmc[1]),
Ayanamsa = swe.swe_get_ayanamsa_ut(jdUt),
Cusps = cusps,
IshtaKala = ishta,
AnchorSunrise = anchor
};
}
ascmc[0] Ascendant এবং ascmc[1] MC। cusps[0] unused; ১–১২ index-এ houses। Array size ১৩-এর কম দিলে native wrapper crash করতে পারে—Swiss documentation-এ এই বিষয়ে বিশেষ সতর্কতা আছে।
৭. Degree থেকে রাশি ও অংশ
static readonly string[] RasiBn = {
"মেষ", "বৃষ", "মিথুন", "কর্কট", "সিংহ", "কন্যা",
"তুলা", "বৃশ্চিক", "ধনু", "মকর", "কুম্ভ", "মীন"
};
static double Normalize360(double value)
{
value %= 360.0;
return value < 0.0 ? value + 360.0 : value;
}
static string FormatRasiLongitude(double longitude)
{
double x = Normalize360(longitude);
int sign = (int)Math.Floor(x / 30.0);
double within = x - sign * 30.0;
int degree = (int)Math.Floor(within);
double minuteRaw = (within - degree) * 60.0;
int minute = (int)Math.Floor(minuteRaw);
int second = (int)Math.Round((minuteRaw - minute) * 60.0);
if (second == 60) { second = 0; minute++; }
if (minute == 60) { minute = 0; degree++; }
if (degree == 30) {
degree = 0;
sign = (sign + 1) % 12;
}
return String.Format(CultureInfo.InvariantCulture,
"{0} {1}° {2:00}′ {3:00}″", RasiBn[sign], degree, minute, second);
}
ঐতিহাসিক জন্মতারিখে Julian/Gregorian সমস্যা
১৫৮২ সালের calendar reform-এর আগের একটি printed “date” Gregorian না Julian—তা না জানলে একই label ভিন্ন JD তৈরি করবে। ১৭৫২ সালেও সব অঞ্চলে একই দিনে civil reform ঘটেনি। তাই historical input-এ তিনটি field আলাদা রাখুন:
source_calendar: Julian / Gregorian / regional civil;astronomical_jd_ut: calculation-এর canonical instant;display_labels: প্রয়োজনে dual Julian/Gregorian date.
Calendar label বদলালে একই physical instant-এর JD, sidereal time বা লগ্ন বদলাবে না। কেবল ভুল label-কে ভুল calendar-এ parse করলে instant বদলে যাবে।
পুরোনো local time-এর আরেক সমস্যা
বর্তমান time-zone database-এর standard offset খুব পুরোনো local mean time-এর জন্য সবসময় ঐতিহাসিক দলিলের exact offset নয়। Railway/standard time চালুর আগের record-এ location longitude থেকে local mean time reconstruction, source note এবং uncertainty range রাখা উচিত।
প্রস্তাবিত API output
{
"input": {
"local_clock": "2026-10-08T10:30:00",
"time_zone": "India Standard Time",
"utc_offset": "+05:30",
"latitude": 22.5833,
"longitude": 88.3500,
"precision": "exact-to-minute"
},
"instant": {
"utc": "2026-10-08T05:00:00Z",
"julian_day_ut": 2461321.708333
},
"ishta_kala": {
"anchor": "sunrise",
"elapsed_seconds": 0,
"danda_pala_vipala": "00/00/00.00"
},
"lagna": {
"reference": "nirayana",
"ayanamsa": "Lahiri",
"house_system": "W",
"longitude": 0.0,
"mc_longitude": 0.0
}
}
উপরের শূন্য values schema example—calculated sample নয়। Documentation-এ fabricated astronomical result না দিয়ে real engine response বসানো উচিত।
Validation checklist
- Local
DateTime.KindUnspecified; - Zone ID required;
- DST invalid time rejected;
- DST ambiguous time requires explicit offset;
- Latitude −৯০° থেকে +৯০°;
- Longitude −১৮০° থেকে +১৮০°;
- East positive, west negative test;
- UTC round-trip unchanged;
- JD noon boundary test;
- Gregorian leap-year test;
- Historical Julian label test;
- 1582 dual-date test;
- 1752 regional label test;
- Birth exactly at sunrise → ইষ্টকাল ০;
- Birth one second before sunrise → previous anchor;
- Birth one second after sunrise → current anchor;
- Post-midnight birth keeps previous sunrise-day;
- Sunrise profile stored;
- High elevation profile test;
- GMST normalized to ০–২৪h;
- LST longitude sign regression;
- Kolkata reference case;
- Dhaka reference case;
- New York standard-time case;
- New York daylight-time case;
- Lahiri mode set before houses;
- Sidereal flag present;
- Cusp array length ১৩;
ascmcarray length ১০;- Ascendant normalized to ০°–৩৬০°;
- 29°59′59.9″ carry test;
- 359°59′59.9″ → 0° carry test;
- Near-sign-boundary input warning;
- Estimated birth-time uncertainty shown;
- Manual Ascendant formula cross-check;
- Swiss
swetestcomparison; - MC comparison;
- All ১২ cusp comparison;
- Rashi chart and table use same longitude;
- Bhava Chalita uses cusp/sandhi, not sign number;
- API and HTML use same raw doubles;
- XML preserves UTC instant;
- Ayanāṃśa value and name printed;
- House-system code printed;
- Ephemeris version printed;
- Cache key includes instant/location/profile;
- No rounding before final formatting;
- NaN/Infinity rejected;
- Polar/high-latitude house warning;
- Thread-safe Swiss Ephemeris access;
- Regression snapshot retained.
সাধারণ ভুল এবং সমাধান
| ভুল | কেন ভুল | সমাধান |
|---|---|---|
| Local clock-কে UTC ধরে নেওয়া | Instant কয়েক ঘণ্টা সরে যায় | Time-zone + actual offset resolve করুন |
| আজকের UTC offset সব historical date-এ ব্যবহার | DST ও historical zone rule বদলায় | Date-specific zone conversion |
| Birth-before-sunrise-এ আজকের sunrise | Negative ইষ্টকাল | Previous sunrise anchor |
| Longitude west positive | LST উল্টো দিকে সরে | East +, west − convention |
| ইষ্টকাল থেকেই সরাসরি লগ্ন | Longitude/latitude/earth rotation বাদ পড়ে | Exact JD UT + location |
| Tropical লগ্নকে nirayana label | Ayanāṃśa প্রয়োগ হয়নি | Sidereal mode/flag |
| Sign = house ধরে নেওয়া | Bhava boundary আলাদা হতে পারে | Cusp ও sandhi ব্যবহার |
| Intermediate degree round করা | Boundary result বদলাতে পারে | Raw double রেখে শেষে format |
উপসংহার
জন্মসময়কে রাশি চক্রে স্থাপন করার নির্ভরযোগ্য পদ্ধতি হলো: civil label থেকে unambiguous UTC instant, তারপর Julian Day UT, sidereal rotation এবং স্থানীয় horizon geometry। ইষ্টকাল একই instant-কে sunrise-anchored traditional unit-এ প্রকাশ করে; এটি লগ্নের বিকল্প input নয়।
স্থানীয় মধ্যাহ্ন clock-noon থেকে আলাদা, আবার apparent solar transit mean noon থেকে আলাদা। এগুলো traditional time verification-এ গুরুত্বপূর্ণ হলেও modern ephemeris exact instant থেকে সরাসরি Ascendant নির্ণয় করতে পারে।
আপনার application-এ Lahiri mode, sidereal flag, east-positive longitude, explicit DST offset, previous-sunrise rule এবং full profile metadata স্থির রাখলে ConversionTools, Daily Details, Rashi Chart, Bhava Chalita, API ও XML একই reproducible result দেবে।
তথ্যসূত্র ও আরও পাঠ
- Swiss Ephemeris—Programming Interface;
swe_houses_ex(), sidereal mode, longitude signs, cusp ওascmcarrays. - Astrodienst—Swiss Ephemeris information; ephemeris scope ও technical background.
- U.S. Naval Observatory—Computing Approximate Sidereal Time; Julian dates ও GMST approximation.
- IAU SOFA Cookbooks; time scales, Earth rotation এবং sidereal-time standards.
- Astrodienst—House Systems; Ascendant-এর geometric definition ও house-system context.
- Swiss Ephemeris official source repository; reference implementation ও documentation.
- সূর্য সিদ্ধান্ত পঞ্জিকা project specification; sunrise-based day, Lahiri nirayana profile, দণ্ড-পল-বিপল এবং Bhava Chalita output convention.
মন্তব্য, আলোচনা ও প্রশ্ন