Source

planets/venus/elliptical.ts

  1. import {
  2. AstronomicalUnit,
  3. EclipticCoordinates,
  4. EquatorialCoordinates,
  5. GeographicCoordinates,
  6. JulianDay,
  7. KilometerPerSecond,
  8. Obliquity,
  9. RiseTransitSet
  10. } from '@/types'
  11. import { Earth } from '@/earth'
  12. import { transformEclipticToEquatorial } from '@/coordinates'
  13. import {
  14. getPlanetApparentGeocentricEclipticCoordinates,
  15. getPlanetGeocentricDistance,
  16. getPlanetGeocentricEclipticCoordinates,
  17. getPlanetInstantaneousVelocity,
  18. getPlanetLengthOfEllipse,
  19. getPlanetVelocityAtAphelion,
  20. getPlanetVelocityAtPerihelion
  21. } from '../elliptical'
  22. import { getPlanetAccurateRiseTransitSet, getPlanetRiseTransitSet } from '../risetransitset'
  23. import { getEclipticLatitude, getEclipticLongitude, getRadiusVector } from './coordinates'
  24. import { getEccentricity, getSemiMajorAxis } from './orbital'
  25. /**
  26. * Geocentric distance (distance between the planet and Earth's center).
  27. * It takes into account the effects of light-time travel & Earth nutation and annual aberration.
  28. * @see getEclipticCoordinates
  29. * @see getGeocentricEquatorialCoordinates
  30. * @param {JulianDay} jd The julian day
  31. * @returns {AstronomicalUnit}
  32. * @memberof module:Venus
  33. */
  34. export function getGeocentricDistance (jd: JulianDay): AstronomicalUnit {
  35. return getPlanetGeocentricDistance(jd, getEclipticLongitude, getEclipticLatitude, getRadiusVector)
  36. }
  37. /**
  38. * Geocentric ecliptic coordinates
  39. * It takes NO account for the effects of light-time travel & Earth nutation and annual aberration.
  40. * @see getEclipticCoordinates
  41. * @see getGeocentricEquatorialCoordinates
  42. * @param {JulianDay} jd The julian day
  43. * @returns {EclipticCoordinates}
  44. * @memberof module:Venus
  45. */
  46. export function getGeocentricEclipticCoordinates (jd: JulianDay): EclipticCoordinates {
  47. return getPlanetGeocentricEclipticCoordinates(jd, getEclipticLongitude, getEclipticLatitude, getRadiusVector)
  48. }
  49. /**
  50. * Apparent geocentric ecliptic coordinates
  51. * It takes into account for the effects of light-time travel & Earth nutation and annual aberration.
  52. * @see getEclipticCoordinates
  53. * @see getGeocentricEquatorialCoordinates
  54. * @param {JulianDay} jd The julian day
  55. * @returns {EclipticCoordinates}
  56. * @memberof module:Venus
  57. */
  58. export function getApparentGeocentricEclipticCoordinates (jd: JulianDay): EclipticCoordinates {
  59. return getPlanetApparentGeocentricEclipticCoordinates(jd, getEclipticLongitude, getEclipticLatitude, getRadiusVector)
  60. }
  61. /**
  62. * Geocentric equatorial coordinates
  63. * It takes NO account for the effects of light-time travel & Earth nutation and annual aberration.
  64. * @see getEquatorialCoordinates
  65. * @see getGeocentricEclipticCoordinates
  66. * @param {JulianDay} jd The julian day
  67. * @param {Obliquity} obliquity The obliquity of the ecliptic: Mean (default) or True.
  68. * @returns {EquatorialCoordinates}
  69. * @memberof module:Venus
  70. */
  71. export function getGeocentricEquatorialCoordinates (jd: JulianDay, obliquity: Obliquity = Obliquity.Mean): EquatorialCoordinates {
  72. return transformEclipticToEquatorial(
  73. getGeocentricEclipticCoordinates(jd),
  74. (obliquity === Obliquity.Mean) ? Earth.getMeanObliquityOfEcliptic(jd) : Earth.getTrueObliquityOfEcliptic(jd)
  75. )
  76. }
  77. /**
  78. * Apparent geocentric apparent equatorial coordinates
  79. * It takes into account the effects of light-time travel & Earth nutation and annual aberration.
  80. * @see getEquatorialCoordinates
  81. * @see getGeocentricEclipticCoordinates
  82. * @param {JulianDay} jd The julian day
  83. * @returns {EquatorialCoordinates}
  84. * @memberof module:Venus
  85. */
  86. export function getApparentGeocentricEquatorialCoordinates (jd: JulianDay): EquatorialCoordinates {
  87. return transformEclipticToEquatorial(
  88. getApparentGeocentricEclipticCoordinates(jd), Earth.getTrueObliquityOfEcliptic(jd)
  89. )
  90. }
  91. /**
  92. * Computes the object instantaneous velocity in the orbit
  93. * @param {JulianDay} jd The julian day
  94. * @returns {KilometerPerSecond} The velocity
  95. * @memberof module:Venus
  96. */
  97. export function getInstantaneousVelocity (jd: JulianDay): KilometerPerSecond {
  98. return getPlanetInstantaneousVelocity(getRadiusVector(jd), getSemiMajorAxis(jd))
  99. }
  100. /**
  101. * Computes the object's velocity at perihelion
  102. * @param {JulianDay} jd The julian day
  103. * @returns {KilometerPerSecond} The velocity
  104. * @memberof module:Venus
  105. */
  106. export function getVelocityAtPerihelion (jd: JulianDay): KilometerPerSecond {
  107. return getPlanetVelocityAtPerihelion(getEccentricity(jd), getSemiMajorAxis(jd))
  108. }
  109. /**
  110. * Computes the object's velocity at aphelion
  111. * @param {JulianDay} jd The julian day
  112. * @returns {KilometerPerSecond} The velocity
  113. * @memberof module:Venus
  114. */
  115. export function getVelocityAtAphelion (jd: JulianDay): KilometerPerSecond {
  116. return getPlanetVelocityAtAphelion(getEccentricity(jd), getSemiMajorAxis(jd))
  117. }
  118. /**
  119. * Computes the object's length of orbit ellipse
  120. * @param {JulianDay} jd The julian day
  121. * @returns {AstronomicalUnit} The ellipse length
  122. * @memberof module:Venus
  123. */
  124. export function getLengthOfEllipse (jd: JulianDay): AstronomicalUnit {
  125. return getPlanetLengthOfEllipse(getEccentricity(jd), getSemiMajorAxis(jd))
  126. }
  127. /**
  128. * Computes the (low-accuracy but fast) times of the rise, transit and set of the planet.
  129. * @param {JulianDay} jd The julian day
  130. * @param {GeographicCoordinates} geoCoords The observer location.
  131. * @returns {RiseTransitSet} The rise, transit and set times
  132. * @memberof module:Venus
  133. */
  134. export function getRiseTransitSet (jd: JulianDay, geoCoords: GeographicCoordinates): RiseTransitSet {
  135. return getPlanetRiseTransitSet(jd, geoCoords, getGeocentricEquatorialCoordinates)
  136. }
  137. /**
  138. * Computes the accurate (better than a minute) times of the rise, transit and set of the planet.
  139. * @param {JulianDay} jd The julian day
  140. * @param {GeographicCoordinates} geoCoords The observer location.
  141. * @returns {RiseTransitSet} The rise, transit and set times
  142. * @memberof module:Venus
  143. */
  144. export function getAccurateRiseTransitSet (jd: JulianDay, geoCoords: GeographicCoordinates): RiseTransitSet {
  145. return getPlanetAccurateRiseTransitSet(jd, geoCoords, getGeocentricEquatorialCoordinates)
  146. }