/// <summary> /// Initialise a mount coordinate with Ra/Dec strings and axis positions in radians. /// </summary> /// <param name="altAz">The AltAzimuth coordinate for the mount</param> /// <param name="suggested">The suggested position for the axes (e.g. via a star catalogue lookup)</param> /// <param name="localTime">The local time of the observation</param> public MountCoordinate(string ra, string dec, IntegerPair axisPosition, Transform transform, double localJulianTimeUTC) : this(new EquatorialCoordinate(ra, dec)) { _Equatorial = new EquatorialCoordinate(ra, dec); _AltAzimuth = this.GetAltAzimuth(transform, localJulianTimeUTC); _AxesPosition = axisPosition; _AxisJulianTimeUTC = localJulianTimeUTC; _MasterCoordinate = MasterCoordinateEnum.Equatorial; }
/// <summary> /// Returns the RADec coordinate for the observed AltAzimuth using the values /// currently set in the passed Transform instance. /// </summary> /// <param name="transform"></param> /// <returns></returns> public EquatorialCoordinate GetEquatorial(Transform transform, double julianDateUTC) { transform.JulianDateUTC = julianDateUTC; transform.SetAzimuthElevation(_AltAzimuth.Azimuth, _AltAzimuth.Altitude); transform.Refresh(); EquatorialCoordinate coord = new EquatorialCoordinate(transform.RATopocentric, transform.DECTopocentric); return(coord); }
/// <summary> /// Obtains a vector in polar notation from the equatorial coordinates and the observation time. /// </summary> /// <param name="coord"></param> /// <param name="time"></param> /// <returns></returns> private Vector GetEVC(EquatorialCoordinate coord, double localSiderealTime) { double deltaTime = AstroConvert.HrsToRad((localSiderealTime - _timeZero)); Vector evc = new Vector(0.0, 0.0, 0.0); evc[0] = Math.Cos(coord.Declination.Radians) * Math.Cos(coord.RightAscension.Radians - (_k * deltaTime)); evc[1] = Math.Cos(coord.Declination.Radians) * Math.Sin(coord.RightAscension.Radians - (_k * deltaTime)); evc[2] = Math.Sin(coord.Declination.Radians); return(evc); }
public void Refresh(EquatorialCoordinate equatorial, IntegerPair axisPosition, Transform transform, double localJulianTimeUTC) { _Equatorial.RightAscension.Value = equatorial.RightAscension.Value; _Equatorial.Declination.Value = equatorial.Declination.Value; _AxesPosition = axisPosition; _LocalJulianTimeUTC = localJulianTimeUTC; RefreshAltAzimuth(transform, localJulianTimeUTC); _MasterCoordinate = MasterCoordinateEnum.Equatorial; }
public AxisPosition GetAxisPosition(EquatorialCoordinate eq, double targetSiderealTime) { Vector EVC = GetEVC(eq, targetSiderealTime); Vector HVC = new Vector(0.0, 0.0, 0.0); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { HVC[i] += _T[i, j] * EVC[j]; } } return(new AxisPosition(AstroConvert.Range2Pi(Math.Atan2(HVC[1], HVC[0])), AstroConvert.Range2Pi(Math.Asin(HVC[2])))); }
/// <summary> /// Initialisation with an equatorial coordinate, a transform instance and the local julian time (corrected) /// which then means that the AltAzimunth at the time is available. /// </summary> public MountCoordinate(AltAzCoordinate altAz, Transform transform, double localJulianTimeUTC) : this(altAz) { _LocalJulianTimeUTC = localJulianTimeUTC; _Equatorial = this.GetEquatorial(transform, localJulianTimeUTC); }
/// <summary> /// Initialisation with an equatorial coordinate, a transform instance and the local julian time (corrected) /// which then means that the AltAzimunth at the time is available. /// </summary> public MountCoordinate(EquatorialCoordinate equatorial, Transform transform, double localJulianTimeUTC) : this(equatorial) { _AltAzimuth = this.GetAltAzimuth(transform, localJulianTimeUTC); _LocalJulianTimeUTC = localJulianTimeUTC; }
/// <summary> /// Simple initialisation with an equatorial coordinate /// </summary> public MountCoordinate(EquatorialCoordinate equatorial) { _Equatorial = equatorial; _MasterCoordinate = MasterCoordinateEnum.Equatorial; }