Practical Astronomy Algorithms in .NET/C#
Loading...
Searching...
No Matches
PACoordinates.cs
Go to the documentation of this file.
1using System;
2using PALib.Helpers;
3
4namespace PALib;
5
9public class PACoordinates
10{
15 public double AngleToDecimalDegrees(double degrees, double minutes, double seconds)
16 {
17 double a = Math.Abs(seconds) / 60;
18 double b = (Math.Abs(minutes) + a) / 60;
19 double c = Math.Abs(degrees) + b;
20 double d = (degrees < 0 || minutes < 0 || seconds < 0) ? -c : c;
21
22 return d;
23 }
24
29 public (double degrees, double minutes, double seconds) DecimalDegreesToAngle(double decimalDegrees)
30 {
31 double unsignedDecimal = Math.Abs(decimalDegrees);
32 double totalSeconds = unsignedDecimal * 3600;
33 double seconds2DP = Math.Round(totalSeconds % 60, 2);
34 double correctedSeconds = (seconds2DP == 60) ? 0 : seconds2DP;
35 double correctedRemainder = (seconds2DP == 60) ? totalSeconds + 60 : totalSeconds;
36 double minutes = (correctedRemainder / 60).Floor() % 60;
37 double unsignedDegrees = (correctedRemainder / 3600).Floor();
38 double signedDegrees = (decimalDegrees < 0) ? -1 * unsignedDegrees : unsignedDegrees;
39
40 return (signedDegrees, minutes, correctedSeconds.Floor());
41 }
42
47 public (double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds) RightAscensionToHourAngle(double raHours, double raMinutes, double raSeconds, double lctHours, double lctMinutes, double lctSeconds, bool isDaylightSavings, int zoneCorrection, double localDay, int localMonth, int localYear, double geographicalLongitude)
48 {
49 int daylightSaving = isDaylightSavings ? 1 : 0;
50
51 double hourAngle = PAMacros.RightAscensionToHourAngle(raHours, raMinutes, raSeconds, lctHours, lctMinutes, lctSeconds, daylightSaving, zoneCorrection, localDay, localMonth, localYear, geographicalLongitude);
52
55 double hourAngleSeconds = PAMacros.DecimalHoursSecond(hourAngle);
56
57 return (hourAngleHours, hourAngleMinutes, hourAngleSeconds);
58 }
59
64 public (double raHours, double raMinutes, double raSeconds) HourAngleToRightAscension(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double lctHours, double lctMinutes, double lctSeconds, bool isDaylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear, double geographicalLongitude)
65 {
66 int daylightSaving = isDaylightSaving ? 1 : 0;
67
68 double rightAscension = PAMacros.HourAngleToRightAscension(hourAngleHours, hourAngleMinutes, hourAngleSeconds, lctHours, lctMinutes, lctSeconds, daylightSaving, zoneCorrection, localDay, localMonth, localYear, geographicalLongitude);
69
70 int rightAscensionHours = PAMacros.DecimalHoursHour(rightAscension);
71 int rightAscensionMinutes = PAMacros.DecimalHoursMinute(rightAscension);
72 double rightAscensionSeconds = PAMacros.DecimalHoursSecond(rightAscension);
73
74 return (rightAscensionHours, rightAscensionMinutes, rightAscensionSeconds);
75 }
76
81 public (double azimuthDegrees, double azimuthMinutes, double azimuthSeconds, double altitudeDegrees, double altitudeMinutes, double altitudeSeconds) EquatorialCoordinatesToHorizonCoordinates(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double declinationDegrees, double declinationMinutes, double declinationSeconds, double geographicalLatitude)
82 {
83 double azimuthInDecimalDegrees = PAMacros.EquatorialCoordinatesToAzimuth(hourAngleHours, hourAngleMinutes, hourAngleSeconds, declinationDegrees, declinationMinutes, declinationSeconds, geographicalLatitude);
84
85 double altitudeInDecimalDegrees = PAMacros.EquatorialCoordinatesToAltitude(hourAngleHours, hourAngleMinutes, hourAngleSeconds, declinationDegrees, declinationMinutes, declinationSeconds, geographicalLatitude);
86
87 double azimuthDegrees = PAMacros.DecimalDegreesDegrees(azimuthInDecimalDegrees);
88 double azimuthMinutes = PAMacros.DecimalDegreesMinutes(azimuthInDecimalDegrees);
89 double azimuthSeconds = PAMacros.DecimalDegreesSeconds(azimuthInDecimalDegrees);
90
91 double altitudeDegrees = PAMacros.DecimalDegreesDegrees(altitudeInDecimalDegrees);
92 double altitudeMinutes = PAMacros.DecimalDegreesMinutes(altitudeInDecimalDegrees);
93 double altitudeSeconds = PAMacros.DecimalDegreesSeconds(altitudeInDecimalDegrees);
94
96 }
97
102 public (double hour_angle_hours, double hour_angle_minutes, double hour_angle_seconds, double declination_degrees, double declination_minutes, double declinationseconds) HorizonCoordinatesToEquatorialCoordinates(double azimuthDegrees, double azimuthMinutes, double azimuthSeconds, double altitudeDegrees, double altitudeMinutes, double altitudeSeconds, double geographicalLatitude)
103 {
104 double hourAngleInDecimalDegrees = PAMacros.HorizonCoordinatesToHourAngle(azimuthDegrees, azimuthMinutes, azimuthSeconds, altitudeDegrees, altitudeMinutes, altitudeSeconds, geographicalLatitude);
105
106 double declinationInDecimalDegrees = PAMacros.HorizonCoordinatesToDeclination(azimuthDegrees, azimuthMinutes, azimuthSeconds, altitudeDegrees, altitudeMinutes, altitudeSeconds, geographicalLatitude);
107
108 int hourAngleHours = PAMacros.DecimalHoursHour(hourAngleInDecimalDegrees);
109 int hourAngleMinutes = PAMacros.DecimalHoursMinute(hourAngleInDecimalDegrees);
110 double hourAngleSeconds = PAMacros.DecimalHoursSecond(hourAngleInDecimalDegrees);
111
112 double declinationDegrees = PAMacros.DecimalDegreesDegrees(declinationInDecimalDegrees);
113 double declinationMinutes = PAMacros.DecimalDegreesMinutes(declinationInDecimalDegrees);
114 double declinationSeconds = PAMacros.DecimalDegreesSeconds(declinationInDecimalDegrees);
115
116 return (hourAngleHours, hourAngleMinutes, hourAngleSeconds, declinationDegrees, declinationMinutes, declinationSeconds);
117 }
118
122 public double MeanObliquityOfTheEcliptic(double greenwichDay, int greenwichMonth, int greenwichYear)
123 {
124 double jd = PAMacros.CivilDateToJulianDate(greenwichDay, greenwichMonth, greenwichYear);
125 double mjd = jd - 2451545;
126 double t = mjd / 36525;
127 double de1 = t * (46.815 + t * (0.0006 - (t * 0.00181)));
128 double de2 = de1 / 3600;
129
130 return 23.439292 - de2;
131 }
132
137 public (double outRAHours, double outRAMinutes, double outRASeconds, double outDecDegrees, double outDecMinutes, double outDecSeconds) EclipticCoordinateToEquatorialCoordinate(double eclipticLongitudeDegrees, double eclipticLongitudeMinutes, double eclipticLongitudeSeconds, double eclipticLatitudeDegrees, double eclipticLatitudeMinutes, double eclipticLatitudeSeconds, double greenwichDay, int greenwichMonth, int greenwichYear)
138 {
139 double eclonDeg = PAMacros.DegreesMinutesSecondsToDecimalDegrees(eclipticLongitudeDegrees, eclipticLongitudeMinutes, eclipticLongitudeSeconds);
140 double eclatDeg = PAMacros.DegreesMinutesSecondsToDecimalDegrees(eclipticLatitudeDegrees, eclipticLatitudeMinutes, eclipticLatitudeSeconds);
141 double eclonRad = eclonDeg.ToRadians();
142 double eclatRad = eclatDeg.ToRadians();
143 double obliqDeg = PAMacros.Obliq(greenwichDay, greenwichMonth, greenwichYear);
144 double obliqRad = obliqDeg.ToRadians();
145 double sinDec = eclatRad.Sine() * obliqRad.Cosine() + eclatRad.Cosine() * obliqRad.Sine() * eclonRad.Sine();
146 double decRad = sinDec.ASine();
147 double decDeg = PAMacros.Degrees(decRad);
148 double y = eclonRad.Sine() * obliqRad.Cosine() - eclatRad.Tangent() * obliqRad.Sine();
149 double x = eclonRad.Cosine();
150 double raRad = y.AngleTangent2(x);
151 double raDeg1 = PAMacros.Degrees(raRad);
152 double raDeg2 = raDeg1 - 360 * (raDeg1 / 360).Floor();
154
160 double outDecSeconds = PAMacros.DecimalDegreesSeconds(decDeg);
161
163 }
164
169 public (double outEclLongDeg, double outEclLongMin, double outEclLongSec, double outEclLatDeg, double outEclLatMin, double outEclLatSec) EquatorialCoordinateToEclipticCoordinate(double raHours, double raMinutes, double raSeconds, double decDegrees, double decMinutes, double decSeconds, double gwDay, int gwMonth, int gwYear)
170 {
173 double raRad = raDeg.ToRadians();
174 double decRad = decDeg.ToRadians();
175 double obliqDeg = PAMacros.Obliq(gwDay, gwMonth, gwYear);
176 double obliqRad = obliqDeg.ToRadians();
177 double sinEclLat = decRad.Sine() * obliqRad.Cosine() - decRad.Cosine() * obliqRad.Sine() * raRad.Sine();
178 double eclLatRad = sinEclLat.ASine();
179 double eclLatDeg = PAMacros.Degrees(eclLatRad);
180 double y = raRad.Sine() * obliqRad.Cosine() + decRad.Tangent() * obliqRad.Sine();
181 double x = raRad.Cosine();
182 double eclLongRad = y.AngleTangent2(x);
183 double eclLongDeg1 = PAMacros.Degrees(eclLongRad);
184 double eclLongDeg2 = eclLongDeg1 - 360 * (eclLongDeg1 / 360).Floor();
185
186 double outEclLongDeg = PAMacros.DecimalDegreesDegrees(eclLongDeg2);
187 double outEclLongMin = PAMacros.DecimalDegreesMinutes(eclLongDeg2);
188 double outEclLongSec = PAMacros.DecimalDegreesSeconds(eclLongDeg2);
189 double outEclLatDeg = PAMacros.DecimalDegreesDegrees(eclLatDeg);
190 double outEclLatMin = PAMacros.DecimalDegreesMinutes(eclLatDeg);
191 double outEclLatSec = PAMacros.DecimalDegreesSeconds(eclLatDeg);
192
194 }
195
200 public (double galLongDeg, double galLongMin, double galLongSec, double galLatDeg, double galLatMin, double galLatSec) EquatorialCoordinateToGalacticCoordinate(double raHours, double raMinutes, double raSeconds, double decDegrees, double decMinutes, double decSeconds)
201 {
204 double raRad = raDeg.ToRadians();
205 double decRad = decDeg.ToRadians();
206 double sinB = decRad.Cosine() * 27.4.ToRadians().Cosine() * (raRad - 192.25.ToRadians()).Cosine() + decRad.Sine() * 27.4.ToRadians().Sine();
207 double bRadians = sinB.ASine();
208 double bDeg = PAMacros.Degrees(bRadians);
209 double y = decRad.Sine() - sinB * 27.4.ToRadians().Sine();
210 double x = decRad.Cosine() * (raRad - 192.25.ToRadians()).Sine() * 27.4.ToRadians().Cosine();
211 double longDeg1 = PAMacros.Degrees(y.AngleTangent2(x)) + 33;
212 double longDeg2 = longDeg1 - 360 * (longDeg1 / 360).Floor();
213
214 double galLongDeg = PAMacros.DecimalDegreesDegrees(longDeg2);
215 double galLongMin = PAMacros.DecimalDegreesMinutes(longDeg2);
216 double galLongSec = PAMacros.DecimalDegreesSeconds(longDeg2);
219 double galLatSec = PAMacros.DecimalDegreesSeconds(bDeg);
220
221 return (galLongDeg, galLongMin, galLongSec, galLatDeg, galLatMin, galLatSec);
222 }
223
228 public (double raHours, double raMinutes, double raSeconds, double decDegrees, double decMinutes, double decSeconds) GalacticCoordinateToEquatorialCoordinate(double galLongDeg, double galLongMin, double galLongSec, double galLatDeg, double galLatMin, double galLatSec)
229 {
232 double glongRad = glongDeg.ToRadians();
233 double glatRad = glatDeg.ToRadians();
234 double sinDec = glatRad.Cosine() * 27.4.ToRadians().Cosine() * (glongRad - 33.0.ToRadians()).Sine() + glatRad.Sine() * 27.4.ToRadians().Sine();
235 double decRadians = sinDec.ASine();
236 double decDeg = PAMacros.Degrees(decRadians);
237 double y = glatRad.Cosine() * (glongRad - 33.0.ToRadians()).Cosine();
238 double x = glatRad.Sine() * 27.4.ToRadians().Cosine() - glatRad.Cosine() * 27.4.ToRadians().Sine() * (glongRad - 33.0.ToRadians()).Sine();
239
240 double raDeg1 = PAMacros.Degrees(y.AngleTangent2(x)) + 192.25;
241 double raDeg2 = raDeg1 - 360 * (raDeg1 / 360).Floor();
242 double raHours1 = PAMacros.DecimalDegreesToDegreeHours(raDeg2);
243
244 int raHours = PAMacros.DecimalHoursHour(raHours1);
245 int raMinutes = PAMacros.DecimalHoursMinute(raHours1);
246 double raSeconds = PAMacros.DecimalHoursSecond(raHours1);
249 double decSeconds = PAMacros.DecimalDegreesSeconds(decDeg);
250
251 return (raHours, raMinutes, raSeconds, decDegrees, decMinutes, decSeconds);
252 }
253
258 public (double angleDeg, double angleMin, double angleSec) AngleBetweenTwoObjects(double raLong1HourDeg, double raLong1Min, double raLong1Sec, double decLat1Deg, double decLat1Min, double decLat1Sec, double raLong2HourDeg, double raLong2Min, double raLong2Sec, double decLat2Deg, double decLat2Min, double decLat2Sec, PAAngleMeasure hourOrDegree)
259 {
260 double raLong1Decimal = (hourOrDegree == PAAngleMeasure.Hours) ? PAMacros.HMStoDH(raLong1HourDeg, raLong1Min, raLong1Sec) : PAMacros.DegreesMinutesSecondsToDecimalDegrees(raLong1HourDeg, raLong1Min, raLong1Sec);
261 double raLong1Deg = (hourOrDegree == PAAngleMeasure.Hours) ? PAMacros.DegreeHoursToDecimalDegrees(raLong1Decimal) : raLong1Decimal;
262
263 double raLong1Rad = raLong1Deg.ToRadians();
264 double decLat1Deg1 = PAMacros.DegreesMinutesSecondsToDecimalDegrees(decLat1Deg, decLat1Min, decLat1Sec);
265 double decLat1Rad = decLat1Deg1.ToRadians();
266
267 double raLong2Decimal = (hourOrDegree == PAAngleMeasure.Hours) ? PAMacros.HMStoDH(raLong2HourDeg, raLong2Min, raLong2Sec) : PAMacros.DegreesMinutesSecondsToDecimalDegrees(raLong2HourDeg, raLong2Min, raLong2Sec);
268 double raLong2Deg = (hourOrDegree == PAAngleMeasure.Hours) ? PAMacros.DegreeHoursToDecimalDegrees(raLong2Decimal) : raLong2Decimal;
269 double raLong2Rad = raLong2Deg.ToRadians();
270 double decLat2Deg1 = PAMacros.DegreesMinutesSecondsToDecimalDegrees(decLat2Deg, decLat2Min, decLat2Sec);
271 double decLat2Rad = decLat2Deg1.ToRadians();
272
273 double cosD = decLat1Rad.Sine() * decLat2Rad.Sine() + decLat1Rad.Cosine() * decLat2Rad.Cosine() * (raLong1Rad - raLong2Rad).Cosine();
274 double dRad = cosD.ACosine();
275 double dDeg = PAMacros.Degrees(dRad);
276
279 double angleSec = PAMacros.DecimalDegreesSeconds(dDeg);
280
281 return (angleDeg, angleMin, angleSec);
282 }
283
284
289 public (string riseSetStatus, double utRiseHour, double utRiseMin, double utSetHour, double utSetMin, double azRise, double azSet) RisingAndSetting(double raHours, double raMinutes, double raSeconds, double decDeg, double decMin, double decSec, double gwDateDay, int gwDateMonth, int gwDateYear, double geogLongDeg, double geogLatDeg, double vertShiftDeg)
290 {
291 double raHours1 = PAMacros.HMStoDH(raHours, raMinutes, raSeconds);
292 double decRad = PAMacros.DegreesMinutesSecondsToDecimalDegrees(decDeg, decMin, decSec).ToRadians();
293 double verticalDisplRadians = vertShiftDeg.ToRadians();
294 double geoLatRadians = geogLatDeg.ToRadians();
295 double cosH = -(verticalDisplRadians.Sine() + geoLatRadians.Sine() * decRad.Sine()) / (geoLatRadians.Cosine() * decRad.Cosine());
296 double hHours = PAMacros.DecimalDegreesToDegreeHours(PAMacros.Degrees(cosH.ACosine()));
297 double lstRiseHours = raHours1 - hHours - 24 * ((raHours1 - hHours) / 24).Floor();
298 double lstSetHours = raHours1 + hHours - 24 * ((raHours1 + hHours) / 24).Floor();
299 double aDeg = PAMacros.Degrees(((decRad.Sine() + verticalDisplRadians.Sine() * geoLatRadians.Sine()) / (verticalDisplRadians.Cosine() * geoLatRadians.Cosine())).ACosine());
300 double azRiseDeg = aDeg - 360 * (aDeg / 360).Floor();
301 double azSetDeg = 360 - aDeg - 360 * ((360 - aDeg) / 360).Floor();
302 double utRiseHours1 = PAMacros.GreenwichSiderealTimeToUniversalTime(PAMacros.LocalSiderealTimeToGreenwichSiderealTime(lstRiseHours, 0, 0, geogLongDeg), 0, 0, gwDateDay, gwDateMonth, gwDateYear);
303 double utSetHours1 = PAMacros.GreenwichSiderealTimeToUniversalTime(PAMacros.LocalSiderealTimeToGreenwichSiderealTime(lstSetHours, 0, 0, geogLongDeg), 0, 0, gwDateDay, gwDateMonth, gwDateYear);
304 double utRiseAdjustedHours = utRiseHours1 + 0.008333;
305 double utSetAdjustedHours = utSetHours1 + 0.008333;
306
307 string riseSetStatus = "OK";
308 if (cosH > 1)
309 riseSetStatus = "never rises";
310 if (cosH < -1)
311 riseSetStatus = "circumpolar";
312
313 int utRiseHour = (riseSetStatus == "OK") ? PAMacros.DecimalHoursHour(utRiseAdjustedHours) : 0;
314 int utRiseMin = (riseSetStatus == "OK") ? PAMacros.DecimalHoursMinute(utRiseAdjustedHours) : 0;
315 int utSetHour = (riseSetStatus == "OK") ? PAMacros.DecimalHoursHour(utSetAdjustedHours) : 0;
316 int utSetMin = (riseSetStatus == "OK") ? PAMacros.DecimalHoursMinute(utSetAdjustedHours) : 0;
317 double azRise = (riseSetStatus == "OK") ? Math.Round(azRiseDeg, 2) : 0;
318 double azSet = (riseSetStatus == "OK") ? Math.Round(azSetDeg, 2) : 0;
319
321 }
322
327 public (double correctedRAHour, double correctedRAMinutes, double correctedRASeconds, double correctedDecDeg, double correctedDecMinutes, double correctedDecSeconds) CorrectForPrecession(double raHour, double raMinutes, double raSeconds, double decDeg, double decMinutes, double decSeconds, double epoch1Day, int epoch1Month, int epoch1Year, double epoch2Day, int epoch2Month, int epoch2Year)
328 {
329 double ra1Rad = PAMacros.DegreeHoursToDecimalDegrees(PAMacros.HMStoDH(raHour, raMinutes, raSeconds)).ToRadians();
330 double dec1Rad = PAMacros.DegreesMinutesSecondsToDecimalDegrees(decDeg, decMinutes, decSeconds).ToRadians();
331 double tCenturies = (PAMacros.CivilDateToJulianDate(epoch1Day, epoch1Month, epoch1Year) - 2415020) / 36525;
332 double mSec = 3.07234 + (0.00186 * tCenturies);
333 double nArcsec = 20.0468 - (0.0085 * tCenturies);
334 double nYears = (PAMacros.CivilDateToJulianDate(epoch2Day, epoch2Month, epoch2Year) - PAMacros.CivilDateToJulianDate(epoch1Day, epoch1Month, epoch1Year)) / 365.25;
335 double s1Hours = (mSec + (nArcsec * ra1Rad.Sine() * dec1Rad.Tangent() / 15)) * nYears / 3600;
336 double ra2Hours = PAMacros.HMStoDH(raHour, raMinutes, raSeconds) + s1Hours;
337 double s2Deg = nArcsec * ra1Rad.Cosine() * nYears / 3600;
338 double dec2Deg = PAMacros.DegreesMinutesSecondsToDecimalDegrees(decDeg, decMinutes, decSeconds) + s2Deg;
339
345 double correctedDecSeconds = PAMacros.DecimalDegreesSeconds(dec2Deg);
346
348 }
349
354 public (double nutInLongDeg, double nutInOblDeg) NutationInEclipticLongitudeAndObliquity(double greenwichDay, int greenwichMonth, int greenwichYear)
355 {
356 double jdDays = PAMacros.CivilDateToJulianDate(greenwichDay, greenwichMonth, greenwichYear);
357 double tCenturies = (jdDays - 2415020) / 36525;
358 double aDeg = 100.0021358 * tCenturies;
359 double l1Deg = 279.6967 + (0.000303 * tCenturies * tCenturies);
360 double lDeg1 = l1Deg + 360 * (aDeg - aDeg.Floor());
361 double lDeg2 = lDeg1 - 360 * (lDeg1 / 360).Floor();
362 double lRad = lDeg2.ToRadians();
363 double bDeg = 5.372617 * tCenturies;
364 double nDeg1 = 259.1833 - 360 * (bDeg - bDeg.Floor());
365 double nDeg2 = nDeg1 - 360 * (nDeg1 / 360).Floor();
366 double nRad = nDeg2.ToRadians();
367 double nutInLongArcsec = -17.2 * nRad.Sine() - 1.3 * (2 * lRad).Sine();
368 double nutInOblArcsec = 9.2 * nRad.Cosine() + 0.5 * (2 * lRad).Cosine();
369
370 double nutInLongDeg = nutInLongArcsec / 3600;
371 double nutInOblDeg = nutInOblArcsec / 3600;
372
373 return (nutInLongDeg, nutInOblDeg);
374 }
375
383 public (double apparentEclLongDeg, double apparentEclLongMin, double apparentEclLongSec, double apparentEclLatDeg, double apparentEclLatMin, double apparentEclLatSec) CorrectForAberration(double utHour, double utMinutes, double utSeconds, double gwDay, int gwMonth, int gwYear, double trueEclLongDeg, double trueEclLongMin, double trueEclLongSec, double trueEclLatDeg, double trueEclLatMin, double trueEclLatSec)
384 {
385 double trueLongDeg = PAMacros.DegreesMinutesSecondsToDecimalDegrees(trueEclLongDeg, trueEclLongMin, trueEclLongSec);
386 double trueLatDeg = PAMacros.DegreesMinutesSecondsToDecimalDegrees(trueEclLatDeg, trueEclLatMin, trueEclLatSec);
387 double sunTrueLongDeg = PAMacros.SunLong(utHour, utMinutes, utSeconds, 0, 0, gwDay, gwMonth, gwYear);
388 double dlongArcsec = -20.5 * (sunTrueLongDeg - trueLongDeg).ToRadians().Cosine() / trueLatDeg.ToRadians().Cosine();
389 double dlatArcsec = -20.5 * (sunTrueLongDeg - trueLongDeg).ToRadians().Sine() * trueLatDeg.ToRadians().Sine();
390 double apparentLongDeg = trueLongDeg + (dlongArcsec / 3600);
391 double apparentLatDeg = trueLatDeg + (dlatArcsec / 3600);
392
393 double apparentEclLongDeg = PAMacros.DecimalDegreesDegrees(apparentLongDeg);
394 double apparentEclLongMin = PAMacros.DecimalDegreesMinutes(apparentLongDeg);
395 double apparentEclLongSec = PAMacros.DecimalDegreesSeconds(apparentLongDeg);
396 double apparentEclLatDeg = PAMacros.DecimalDegreesDegrees(apparentLatDeg);
397 double apparentEclLatMin = PAMacros.DecimalDegreesMinutes(apparentLatDeg);
398 double apparentEclLatSec = PAMacros.DecimalDegreesSeconds(apparentLatDeg);
399
401 }
402
403
414 public (double correctedRAHour, double correctedRAMin, double correctedRASec, double correctedDecDeg, double correctedDecMin, double correctedDecSec) AtmosphericRefraction(double trueRAHour, double trueRAMin, double trueRASec, double trueDecDeg, double trueDecMin, double trueDecSec, PACoordinateType coordinateType, double geogLongDeg, double geogLatDeg, int daylightSavingHours, int timezoneHours, double lcdDay, int lcdMonth, int lcdYear, double lctHour, double lctMin, double lctSec, double atmosphericPressureMbar, double atmosphericTemperatureCelsius)
415 {
416 double haHour = PAMacros.RightAscensionToHourAngle(trueRAHour, trueRAMin, trueRASec, lctHour, lctMin, lctSec, daylightSavingHours, timezoneHours, lcdDay, lcdMonth, lcdYear, geogLongDeg);
417 double azimuthDeg = PAMacros.EquatorialCoordinatesToAzimuth(haHour, 0, 0, trueDecDeg, trueDecMin, trueDecSec, geogLatDeg);
418 double altitudeDeg = PAMacros.EquatorialCoordinatesToAltitude(haHour, 0, 0, trueDecDeg, trueDecMin, trueDecSec, geogLatDeg);
419 double correctedAltitudeDeg = PAMacros.Refract(altitudeDeg, coordinateType, atmosphericPressureMbar, atmosphericTemperatureCelsius);
420
421 double correctedHAHour = PAMacros.HorizonCoordinatesToHourAngle(azimuthDeg, 0, 0, correctedAltitudeDeg, 0, 0, geogLatDeg);
422 double correctedRAHour1 = PAMacros.HourAngleToRightAscension(correctedHAHour, 0, 0, lctHour, lctMin, lctSec, daylightSavingHours, timezoneHours, lcdDay, lcdMonth, lcdYear, geogLongDeg);
423 double correctedDecDeg1 = PAMacros.HorizonCoordinatesToDeclination(azimuthDeg, 0, 0, correctedAltitudeDeg, 0, 0, geogLatDeg);
424
425 int correctedRAHour = PAMacros.DecimalHoursHour(correctedRAHour1);
426 int correctedRAMin = PAMacros.DecimalHoursMinute(correctedRAHour1);
427 double correctedRASec = PAMacros.DecimalHoursSecond(correctedRAHour1);
428 double correctedDecDeg = PAMacros.DecimalDegreesDegrees(correctedDecDeg1);
429 double correctedDecMin = PAMacros.DecimalDegreesMinutes(correctedDecDeg1);
430 double correctedDecSec = PAMacros.DecimalDegreesSeconds(correctedDecDeg1);
431
433 }
434
435
440 public (double correctedRAHour, double correctedRAMin, double correctedRASec, double correctedDecDeg, double correctedDecMin, double correctedDecSec) CorrectionsForGeocentricParallax(double raHour, double raMin, double raSec, double decDeg, double decMin, double decSec, PACoordinateType coordinateType, double equatorialHorParallaxDeg, double geogLongDeg, double geogLatDeg, double heightM, int daylightSaving, int timezoneHours, double lcdDay, int lcdMonth, int lcdYear, double lctHour, double lctMin, double lctSec)
441 {
442 double haHours = PAMacros.RightAscensionToHourAngle(raHour, raMin, raSec, lctHour, lctMin, lctSec, daylightSaving, timezoneHours, lcdDay, lcdMonth, lcdYear, geogLongDeg);
443
444 double correctedHAHours = PAMacros.ParallaxHA(haHours, 0, 0, decDeg, decMin, decSec, coordinateType, geogLatDeg, heightM, equatorialHorParallaxDeg);
445
446 double correctedRAHours = PAMacros.HourAngleToRightAscension(correctedHAHours, 0, 0, lctHour, lctMin, lctSec, daylightSaving, timezoneHours, lcdDay, lcdMonth, lcdYear, geogLongDeg);
447
448 double correctedDecDeg1 = PAMacros.ParallaxDec(haHours, 0, 0, decDeg, decMin, decSec, coordinateType, geogLatDeg, heightM, equatorialHorParallaxDeg);
449
450 int correctedRAHour = PAMacros.DecimalHoursHour(correctedRAHours);
451 int correctedRAMin = PAMacros.DecimalHoursMinute(correctedRAHours);
452 double correctedRASec = PAMacros.DecimalHoursSecond(correctedRAHours);
453 double correctedDecDeg = PAMacros.DecimalDegreesDegrees(correctedDecDeg1);
454 double correctedDecMin = PAMacros.DecimalDegreesMinutes(correctedDecDeg1);
455 double correctedDecSec = PAMacros.DecimalDegreesSeconds(correctedDecDeg1);
456
458 }
459
464 public (double helioLongDeg, double helioLatDeg) HeliographicCoordinates(double helioPositionAngleDeg, double helioDisplacementArcmin, double gwdateDay, int gwdateMonth, int gwdateYear)
465 {
466 double julianDateDays = PAMacros.CivilDateToJulianDate(gwdateDay, gwdateMonth, gwdateYear);
467 double tCenturies = (julianDateDays - 2415020) / 36525;
468 double longAscNodeDeg = PAMacros.DegreesMinutesSecondsToDecimalDegrees(74, 22, 0) + (84 * tCenturies / 60);
469 double sunLongDeg = PAMacros.SunLong(0, 0, 0, 0, 0, gwdateDay, gwdateMonth, gwdateYear);
470 double y = (longAscNodeDeg - sunLongDeg).ToRadians().Sine() * PAMacros.DegreesMinutesSecondsToDecimalDegrees(7, 15, 0).ToRadians().Cosine();
471 double x = -(longAscNodeDeg - sunLongDeg).ToRadians().Cosine();
472 double aDeg = PAMacros.Degrees(y.AngleTangent2(x));
473 double mDeg1 = 360 - (360 * (julianDateDays - 2398220) / 25.38);
474 double mDeg2 = mDeg1 - 360 * (mDeg1 / 360).Floor();
475 double l0Deg1 = mDeg2 + aDeg;
476 double b0Rad = ((sunLongDeg - longAscNodeDeg).ToRadians().Sine() * PAMacros.DegreesMinutesSecondsToDecimalDegrees(7, 15, 0).ToRadians().Sine()).ASine();
477 double theta1Rad = (-sunLongDeg.ToRadians().Cosine() * PAMacros.Obliq(gwdateDay, gwdateMonth, gwdateYear).ToRadians().Tangent()).AngleTangent();
478 double theta2Rad = (-(longAscNodeDeg - sunLongDeg).ToRadians().Cosine() * PAMacros.DegreesMinutesSecondsToDecimalDegrees(7, 15, 0).ToRadians().Tangent()).AngleTangent();
479 double pDeg = PAMacros.Degrees(theta1Rad + theta2Rad);
480 double rho1Deg = helioDisplacementArcmin / 60;
481 double rhoRad = (2 * rho1Deg / PAMacros.SunDia(0, 0, 0, 0, 0, gwdateDay, gwdateMonth, gwdateYear)).ASine() - rho1Deg.ToRadians();
482 double bRad = (b0Rad.Sine() * rhoRad.Cosine() + b0Rad.Cosine() * rhoRad.Sine() * (pDeg - helioPositionAngleDeg).ToRadians().Cosine()).ASine();
483 double bDeg = PAMacros.Degrees(bRad);
484 double lDeg1 = PAMacros.Degrees((rhoRad.Sine() * (pDeg - helioPositionAngleDeg).ToRadians().Sine() / bRad.Cosine()).ASine()) + l0Deg1;
485 double lDeg2 = lDeg1 - 360 * (lDeg1 / 360).Floor();
486
487 double helioLongDeg = Math.Round(lDeg2, 2);
488 double helioLatDeg = Math.Round(bDeg, 2);
489
490 return (helioLongDeg, helioLatDeg);
491 }
492
497 public int CarringtonRotationNumber(double gwdateDay, int gwdateMonth, int gwdateYear)
498 {
499 double julianDateDays = PAMacros.CivilDateToJulianDate(gwdateDay, gwdateMonth, gwdateYear);
500
501 int crn = 1690 + (int)Math.Round((julianDateDays - 2444235.34) / 27.2753, 0);
502
503 return crn;
504 }
505
510 public (double subEarthLongitude, double subEarthLatitude, double positionAngleOfPole) SelenographicCoordinates1(double gwdateDay, int gwdateMonth, int gwdateYear)
511 {
512 double julianDateDays = PAMacros.CivilDateToJulianDate(gwdateDay, gwdateMonth, gwdateYear);
513 double tCenturies = (julianDateDays - 2451545) / 36525;
514 double longAscNodeDeg = 125.044522 - 1934.136261 * tCenturies;
515 double f1 = 93.27191 + 483202.0175 * tCenturies;
516 double f2 = f1 - 360 * (f1 / 360).Floor();
517 double geocentricMoonLongDeg = PAMacros.MoonLong(0, 0, 0, 0, 0, gwdateDay, gwdateMonth, gwdateYear);
518 double geocentricMoonLatRad = PAMacros.MoonLat(0, 0, 0, 0, 0, gwdateDay, gwdateMonth, gwdateYear).ToRadians();
519 double inclinationRad = PAMacros.DegreesMinutesSecondsToDecimalDegrees(1, 32, 32.7).ToRadians();
520 double nodeLongRad = (longAscNodeDeg - geocentricMoonLongDeg).ToRadians();
521 double sinBe = -inclinationRad.Cosine() * geocentricMoonLatRad.Sine() + inclinationRad.Sine() * geocentricMoonLatRad.Cosine() * nodeLongRad.Sine();
522 double subEarthLatDeg = PAMacros.Degrees(sinBe.ASine());
523 double aRad = (-geocentricMoonLatRad.Sine() * inclinationRad.Sine() - geocentricMoonLatRad.Cosine() * inclinationRad.Cosine() * nodeLongRad.Sine()).AngleTangent2(geocentricMoonLatRad.Cosine() * nodeLongRad.Cosine());
524 double aDeg = PAMacros.Degrees(aRad);
525 double subEarthLongDeg1 = aDeg - f2;
526 double subEarthLongDeg2 = subEarthLongDeg1 - 360 * (subEarthLongDeg1 / 360).Floor();
527 double subEarthLongDeg3 = (subEarthLongDeg2 > 180) ? subEarthLongDeg2 - 360 : subEarthLongDeg2;
528 double c1Rad = (nodeLongRad.Cosine() * inclinationRad.Sine() / (geocentricMoonLatRad.Cosine() * inclinationRad.Cosine() + geocentricMoonLatRad.Sine() * inclinationRad.Sine() * nodeLongRad.Sine())).AngleTangent();
529 double obliquityRad = PAMacros.Obliq(gwdateDay, gwdateMonth, gwdateYear).ToRadians();
530 double c2Rad = (obliquityRad.Sine() * geocentricMoonLongDeg.ToRadians().Cosine() / (obliquityRad.Sine() * geocentricMoonLatRad.Sine() * geocentricMoonLongDeg.ToRadians().Sine() - obliquityRad.Cosine() * geocentricMoonLatRad.Cosine())).AngleTangent();
531 double cDeg = PAMacros.Degrees(c1Rad + c2Rad);
532
533 double subEarthLongitude = Math.Round(subEarthLongDeg3, 2);
534 double subEarthLatitude = Math.Round(subEarthLatDeg, 2);
535 double positionAngleOfPole = Math.Round(cDeg, 2);
536
537 return (subEarthLongitude, subEarthLatitude, positionAngleOfPole);
538 }
539
544 public (double subSolarLongitude, double subSolarColongitude, double subSolarLatitude) SelenographicCoordinates2(double gwdateDay, int gwdateMonth, int gwdateYear)
545 {
546 double julianDateDays = PAMacros.CivilDateToJulianDate(gwdateDay, gwdateMonth, gwdateYear);
547 double tCenturies = (julianDateDays - 2451545) / 36525;
548 double longAscNodeDeg = 125.044522 - 1934.136261 * tCenturies;
549 double f1 = 93.27191 + 483202.0175 * tCenturies;
550 double f2 = f1 - 360 * (f1 / 360).Floor();
551 double sunGeocentricLongDeg = PAMacros.SunLong(0, 0, 0, 0, 0, gwdateDay, gwdateMonth, gwdateYear);
552 double moonEquHorParallaxArcMin = PAMacros.MoonHP(0, 0, 0, 0, 0, gwdateDay, gwdateMonth, gwdateYear) * 60;
553 double sunEarthDistAU = PAMacros.SunDist(0, 0, 0, 0, 0, gwdateDay, gwdateMonth, gwdateYear);
554 double geocentricMoonLatRad = PAMacros.MoonLat(0, 0, 0, 0, 0, gwdateDay, gwdateMonth, gwdateYear).ToRadians();
555 double geocentricMoonLongDeg = PAMacros.MoonLong(0, 0, 0, 0, 0, gwdateDay, gwdateMonth, gwdateYear);
556 double adjustedMoonLongDeg = sunGeocentricLongDeg + 180 + (26.4 * geocentricMoonLatRad.Cosine() * (sunGeocentricLongDeg - geocentricMoonLongDeg).ToRadians().Sine() / (moonEquHorParallaxArcMin * sunEarthDistAU));
557 double adjustedMoonLatRad = 0.14666 * geocentricMoonLatRad / (moonEquHorParallaxArcMin * sunEarthDistAU);
558 double inclinationRad = PAMacros.DegreesMinutesSecondsToDecimalDegrees(1, 32, 32.7).ToRadians();
559 double nodeLongRad = (longAscNodeDeg - adjustedMoonLongDeg).ToRadians();
560 double sinBs = -inclinationRad.Cosine() * adjustedMoonLatRad.Sine() + inclinationRad.Sine() * adjustedMoonLatRad.Cosine() * nodeLongRad.Sine();
561 double subSolarLatDeg = PAMacros.Degrees(sinBs.ASine());
562 double aRad = (-adjustedMoonLatRad.Sine() * inclinationRad.Sine() - adjustedMoonLatRad.Cosine() * inclinationRad.Cosine() * nodeLongRad.Sine()).AngleTangent2(adjustedMoonLatRad.Cosine() * nodeLongRad.Cosine());
563 double aDeg = PAMacros.Degrees(aRad);
564 double subSolarLongDeg1 = aDeg - f2;
565 double subSolarLongDeg2 = subSolarLongDeg1 - 360 * (subSolarLongDeg1 / 360).Floor();
566 double subSolarLongDeg3 = (subSolarLongDeg2 > 180) ? subSolarLongDeg2 - 360 : subSolarLongDeg2;
567 double subSolarColongDeg = 90 - subSolarLongDeg3;
568
569 double subSolarLongitude = Math.Round(subSolarLongDeg3, 2);
570 double subSolarColongitude = Math.Round(subSolarColongDeg, 2);
571 double subSolarLatitude = Math.Round(subSolarLatDeg, 2);
572
573 return (subSolarLongitude, subSolarColongitude, subSolarLatitude);
574 }
575}
Coordinate system calculations and conversions.
double double helioLatDeg HeliographicCoordinates(double helioPositionAngleDeg, double helioDisplacementArcmin, double gwdateDay, int gwdateMonth, int gwdateYear)
double double outRAMinutes
double double double double outEclLatDeg
double double subSolarColongitude
double double galLongMin
double hour_angle_hours
Convert Horizon Coordinates to Equatorial Coordinates.
double double double double double outEclLatMin
double double double azimuthSeconds
double double double angleSec AngleBetweenTwoObjects(double raLong1HourDeg, double raLong1Min, double raLong1Sec, double decLat1Deg, double decLat1Min, double decLat1Sec, double raLong2HourDeg, double raLong2Min, double raLong2Sec, double decLat2Deg, double decLat2Min, double decLat2Sec, PAAngleMeasure hourOrDegree)
double hourAngleHours
Convert Right Ascension to Hour Angle.
double double double raSeconds
double double double double double double correctedDecSec CorrectionsForGeocentricParallax(double raHour, double raMin, double raSec, double decDeg, double decMin, double decSec, PACoordinateType coordinateType, double equatorialHorParallaxDeg, double geogLongDeg, double geogLatDeg, double heightM, int daylightSaving, int timezoneHours, double lcdDay, int lcdMonth, int lcdYear, double lctHour, double lctMin, double lctSec)
double outEclLongDeg
Convert Equatorial Coordinates to Ecliptic Coordinates.
double helioLongDeg
Calculate heliographic coordinates for a given Greenwich date, with a given heliographic position ang...
double double double double double double galLatSec EquatorialCoordinateToGalacticCoordinate(double raHours, double raMinutes, double raSeconds, double decDegrees, double decMinutes, double decSeconds)
double subEarthLongitude
Calculate selenographic (lunar) coordinates (sub-Earth)
double subSolarLongitude
Calculate selenographic (lunar) coordinates (sub-Solar)
double double outEclLongMin
double double double double decDegrees
double double raMinutes
double double double double double correctedDecMin
double double hour_angle_minutes
double double double double double double correctedDecSec AtmosphericRefraction(double trueRAHour, double trueRAMin, double trueRASec, double trueDecDeg, double trueDecMin, double trueDecSec, PACoordinateType coordinateType, double geogLongDeg, double geogLatDeg, int daylightSavingHours, int timezoneHours, double lcdDay, int lcdMonth, int lcdYear, double lctHour, double lctMin, double lctSec, double atmosphericPressureMbar, double atmosphericTemperatureCelsius)
double double double correctedRASeconds
double double azimuthMinutes
double double double hour_angle_seconds
string double double double utSetHour
double double double galLongSec
double double double double double double declinationseconds HorizonCoordinatesToEquatorialCoordinates(double azimuthDegrees, double azimuthMinutes, double azimuthSeconds, double altitudeDegrees, double altitudeMinutes, double altitudeSeconds, double geographicalLatitude)
string double double double double double double azSet RisingAndSetting(double raHours, double raMinutes, double raSeconds, double decDeg, double decMin, double decSec, double gwDateDay, int gwDateMonth, int gwDateYear, double geogLongDeg, double geogLatDeg, double vertShiftDeg)
double apparentEclLongDeg
Correct ecliptic coordinates for the effects of aberration.
double double double double altitudeDegrees
double correctedRAHour
Calculate precession (corrected coordinates between two epochs)
double azimuthDegrees
Convert Equatorial Coordinates to Horizon Coordinates.
double double correctedRAMin
int CarringtonRotationNumber(double gwdateDay, int gwdateMonth, int gwdateYear)
Calculate carrington rotation number for a Greenwich date.
double nutInLongDeg
Calculate nutation for two values: ecliptic longitude and obliquity, for a Greenwich date.
double double double double double outDecMinutes
double raHours
Convert Hour Angle to Right Ascension.
double double angleMin
double double hourAngleMinutes
double double double double correctedDecDeg
double double double double apparentEclLatDeg
string double double double double double azRise
double double double double double decMinutes
double double double double double double altitudeSeconds EquatorialCoordinatesToHorizonCoordinates(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double declinationDegrees, double declinationMinutes, double declinationSeconds, double geographicalLatitude)
string double double double double utSetMin
double galLongDeg
Convert Equatorial Coordinates to Galactic Coordinates.
double double double double double correctedDecMinutes
double double double outEclLongSec
double double double double double double decSeconds GalacticCoordinateToEquatorialCoordinate(double galLongDeg, double galLongMin, double galLongSec, double galLatDeg, double galLatMin, double galLatSec)
string double utRiseHour
double double double double double galLatMin
double MeanObliquityOfTheEcliptic(double greenwichDay, int greenwichMonth, int greenwichYear)
Calculate Mean Obliquity of the Ecliptic for a Greenwich Date.
double double minutes
double double double double double double apparentEclLatSec CorrectForAberration(double utHour, double utMinutes, double utSeconds, double gwDay, int gwMonth, int gwYear, double trueEclLongDeg, double trueEclLongMin, double trueEclLongSec, double trueEclLatDeg, double trueEclLatMin, double trueEclLatSec)
double double double apparentEclLongSec
double double double double double altitudeMinutes
double double double outRASeconds
double double double double declination_degrees
double double double double double double outEclLatSec EquatorialCoordinateToEclipticCoordinate(double raHours, double raMinutes, double raSeconds, double decDegrees, double decMinutes, double decSeconds, double gwDay, int gwMonth, int gwYear)
double double double hourAngleSeconds RightAscensionToHourAngle(double raHours, double raMinutes, double raSeconds, double lctHours, double lctMinutes, double lctSeconds, bool isDaylightSavings, int zoneCorrection, double localDay, int localMonth, int localYear, double geographicalLongitude)
double double subEarthLatitude
double angleDeg
Calculate the angle between two celestial objects.
double double double seconds DecimalDegreesToAngle(double decimalDegrees)
double degrees
Convert Decimal Degrees to an Angle (degrees, minutes, and seconds)
double double double subSolarLatitude SelenographicCoordinates2(double gwdateDay, int gwdateMonth, int gwdateYear)
double double double double double apparentEclLatMin
string double double utRiseMin
double double double raSeconds HourAngleToRightAscension(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double lctHours, double lctMinutes, double lctSeconds, bool isDaylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear, double geographicalLongitude)
string riseSetStatus
Calculate rising and setting times for an object.
double double double double outDecDegrees
double double double double double double correctedDecSeconds CorrectForPrecession(double raHour, double raMinutes, double raSeconds, double decDeg, double decMinutes, double decSeconds, double epoch1Day, int epoch1Month, int epoch1Year, double epoch2Day, int epoch2Month, int epoch2Year)
double double double double double declination_minutes
double AngleToDecimalDegrees(double degrees, double minutes, double seconds)
Convert an Angle (degrees, minutes, and seconds) to Decimal Degrees.
double double double double galLatDeg
double outRAHours
Convert Ecliptic Coordinates to Equatorial Coordinates.
double double double positionAngleOfPole SelenographicCoordinates1(double gwdateDay, int gwdateMonth, int gwdateYear)
double double double correctedRASec
double double correctedRAMinutes
double double double double double double outDecSeconds EclipticCoordinateToEquatorialCoordinate(double eclipticLongitudeDegrees, double eclipticLongitudeMinutes, double eclipticLongitudeSeconds, double eclipticLatitudeDegrees, double eclipticLatitudeMinutes, double eclipticLatitudeSeconds, double greenwichDay, int greenwichMonth, int greenwichYear)
double double apparentEclLongMin
double double nutInOblDeg NutationInEclipticLongitudeAndObliquity(double greenwichDay, int greenwichMonth, int greenwichYear)
Miscellaneous macro functions supporting the other classes.
Definition PAMacros.cs:13
static double GreenwichSiderealTimeToUniversalTime(double greenwichSiderealHours, double greenwichSiderealMinutes, double greenwichSiderealSeconds, double greenwichDay, int greenwichMonth, int greenwichYear)
Convert Greenwich Sidereal Time to Universal Time.
Definition PAMacros.cs:720
static double HourAngleToRightAscension(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double lctHours, double lctMinutes, double lctSeconds, int daylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear, double geographicalLongitude)
Convert Hour Angle to Right Ascension.
Definition PAMacros.cs:217
static double ParallaxHA(double hh, double hm, double hs, double dd, double dm, double ds, PACoordinateType sw, double gp, double ht, double hp)
Calculate corrected hour angle in decimal hours.
Definition PAMacros.cs:947
static double CivilDateToJulianDate(double day, double month, double year)
Convert a Greenwich Date/Civil Date (day,month,year) to Julian Date.
Definition PAMacros.cs:87
static double ParallaxDec(double hh, double hm, double hs, double dd, double dm, double ds, PACoordinateType sw, double gp, double ht, double hp)
Calculate corrected declination in decimal degrees.
Definition PAMacros.cs:1040
static double Degrees(double w)
Convert W to Degrees.
Definition PAMacros.cs:463
static double RightAscensionToHourAngle(double raHours, double raMinutes, double raSeconds, double lctHours, double lctMinutes, double lctSeconds, int daylightSaving, int zoneCorrection, double localDay, int localMonth, int localYear, double geographicalLongitude)
Convert Right Ascension to Hour Angle.
Definition PAMacros.cs:197
static double MoonLat(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate geocentric ecliptic latitude for the Moon.
Definition PAMacros.cs:1283
static double LocalSiderealTimeToGreenwichSiderealTime(double localHours, double localMinutes, double localSeconds, double longitude)
Convert Local Sidereal Time to Greenwich Sidereal Time.
Definition PAMacros.cs:705
static double HorizonCoordinatesToDeclination(double azimuthDegrees, double azimuthMinutes, double azimuthSeconds, double altitudeDegrees, double altitudeMinutes, double altitudeSeconds, double geographicalLatitude)
Convert Horizon Coordinates to Declination (in decimal degrees)
Definition PAMacros.cs:544
static double DegreeHoursToDecimalDegrees(double degreeHours)
Convert Degree-Hours to Decimal Degrees.
Definition PAMacros.cs:533
static double Obliq(double greenwichDay, int greenwichMonth, int greenwichYear)
Obliquity of the Ecliptic for a Greenwich Date.
Definition PAMacros.cs:583
static double SunDist(double lch, double lcm, double lcs, int ds, int zc, double ld, int lm, int ly)
Calculate Sun's distance from the Earth in astronomical units.
Definition PAMacros.cs:1140
static double DecimalDegreesToDegreeHours(double decimalDegrees)
Convert Decimal Degrees to Degree-Hours.
Definition PAMacros.cs:522
static double HorizonCoordinatesToHourAngle(double azimuthDegrees, double azimuthMinutes, double azimuthSeconds, double altitudeDegrees, double altitudeMinutes, double altitudeSeconds, double geographicalLatitude)
Convert Horizon Coordinates to Hour Angle (in decimal degrees)
Definition PAMacros.cs:562
static double Refract(double y2, PACoordinateType sw, double pr, double tr)
Calculate effects of refraction.
Definition PAMacros.cs:878
static double SunDia(double lch, double lcm, double lcs, int ds, int zc, double ld, int lm, int ly)
Calculate Sun's angular diameter in decimal degrees.
Definition PAMacros.cs:1127
static double MoonHP(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate horizontal parallax for the Moon.
Definition PAMacros.cs:1376
static int DecimalHoursMinute(double decimalHours)
Return the minutes part of a Decimal Hours.
Definition PAMacros.cs:55
static double DecimalHoursSecond(double decimalHours)
Return the seconds part of a Decimal Hours.
Definition PAMacros.cs:71
static double DecimalDegreesSeconds(double decimalDegrees)
Return Seconds part of Decimal Degrees.
Definition PAMacros.cs:506
static double EquatorialCoordinatesToAzimuth(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double declinationDegrees, double declinationMinutes, double declinationSeconds, double geographicalLatitude)
Convert Equatorial Coordinates to Azimuth (in decimal degrees)
Definition PAMacros.cs:407
static int DecimalHoursHour(double decimalHours)
Return the hour part of a Decimal Hours.
Definition PAMacros.cs:39
static double SunLong(double lch, double lcm, double lcs, int ds, int zc, double ld, int lm, int ly)
Calculate Sun's ecliptic longitude.
Definition PAMacros.cs:760
static double MoonLong(double lh, double lm, double ls, int ds, int zc, double dy, int mn, int yr)
Calculate geocentric ecliptic longitude for the Moon.
Definition PAMacros.cs:1189
static double DecimalDegreesMinutes(double decimalDegrees)
Return Minutes part of Decimal Degrees.
Definition PAMacros.cs:490
static double DecimalDegreesDegrees(double decimalDegrees)
Return Degrees part of Decimal Degrees.
Definition PAMacros.cs:474
static double DegreesMinutesSecondsToDecimalDegrees(double degrees, double minutes, double seconds)
Convert Degrees Minutes Seconds to Decimal Degrees.
Definition PAMacros.cs:448
static double HMStoDH(double hours, double minutes, double seconds)
Convert a Civil Time (hours,minutes,seconds) to Decimal Hours.
Definition PAMacros.cs:20
static double EquatorialCoordinatesToAltitude(double hourAngleHours, double hourAngleMinutes, double hourAngleSeconds, double declinationDegrees, double declinationMinutes, double declinationSeconds, double geographicalLatitude)
Convert Equatorial Coordinates to Altitude (in decimal degrees)
Definition PAMacros.cs:429
PAAngleMeasure
Angle measurement units.
Definition PATypes.cs:49
PACoordinateType
Coordinate types.
Definition PATypes.cs:9