Skip to content

Introduce Astrometric position for planets#129

Merged
rhannequin merged 2 commits intomainfrom
astrometric-position-of-planets
Feb 17, 2025
Merged

Introduce Astrometric position for planets#129
rhannequin merged 2 commits intomainfrom
astrometric-position-of-planets

Conversation

@rhannequin
Copy link
Owner

@rhannequin rhannequin commented Feb 12, 2025

In Astronoby, an astrometric position is a geocentric position in the International Celestial Reference Frame (ICRF) with light-time delay correction.

In other libraries, an astrometric position doesn't necessarily have to be geocentric, it can be with any center as long as it takes into account the light-time delay. For Astronoby, because the current focus is observation from Earth, the center is automatically the Earth center of mass.

While it includes a correction for the time the light takes to reach the center, it is not an "apparent" position, meaning it doesn't exactly describe where an object would be seen in the sky from an observer on Earth, as many other corrections must be applied to achieve this. But this is not the purpose of the astrometric position.

From the astrometric position, we will be able to compute the apparent position, but also to change frame from equatorial to ecliptic for some of the algorithms.

At the moment, this position is only available to the 8 planets of the Solar System.

This PR also adds Distance#abs2 to be able to compute a vector magnitude, necessary for calculating the distance between the center and the target.

Because it is a geocentric position, the Earth astrometric position in Astronoby is a null vector.

As documented is specs, the accuracy is very high: right ascension and declination are matching the IMCCE's results below a tenth of arcsecond.

Usage

time = Time.utc(2025, 4, 1)
instant = Astronoby::Instant.from_time(time)
ephem = Astronoby::Ephem.load("de440s.bsp")

mars = Astronoby::Mars.new(instant: instant, ephem: ephem)
astrometric = mars.astrometric

astrometric.right_ascension.str(:hms)
# => "7h 42m 19.2644s"

astrometric.declination.str(:dms)
# => "+24° 3′ 35.8686″"

astrometric.distance.kilometers.round
# => 170390364

astrometric.position.map(&:km).map(&:round)
# => Vector[-67178482, 140336314, 69466874]

astrometric.velocity.map(&:kmps).map { _1.round(2) }
# => Vector[-16.79, 9.77, 4.11]

@rhannequin rhannequin self-assigned this Feb 12, 2025
@rhannequin rhannequin merged commit 72def59 into main Feb 17, 2025
34 checks passed
@rhannequin rhannequin deleted the astrometric-position-of-planets branch February 17, 2025 08:50
@rhannequin rhannequin mentioned this pull request Apr 30, 2025
rhannequin added a commit that referenced this pull request May 12, 2025
## 0.7.0 - 2025-05-12

_If you are upgrading: please see [UPGRADING.md]._

### Bug fixes

* Fix Moon monthly phase events calculation by @valeriy-sokoloff in ([#124])

### Features

* Add `Instant` value object ([#121])
* Introduce barycentric position of Solar System major bodies ([#127])
* Introduce Astrometric position for planets ([#129])
* Rename Barycentric into Geometric ([#130])
* Rename IRCF and remove module Position ([#131])
* Geometric and Astrometric reference frames with coordinates ([#132])
* Ecliptic coordinates for Geometric and Astrometric reference frames ([#134])
* Add Geometric and Astrometric positions for `Sun` and `Moon` ([#135])
* Implement new aberration correction ([#136])
* Precession matrix for 2006 P03 model ([#137])
* Introduce `MeanOfDate` reference frame ([#138])
* New nutation model ([#141])
* Light deflection correction ([#142])
* Introduce `Apparent` reference frame ([#143])
* Introduce `Topocentric` reference frame ([#145])
* Improve Vector integration with value objects ([#146])
* Handle refracted topocentric horizontal coordinates ([#147])
* Add `#angular_diameter` to apparent and topocentric reference frames ([#149])
* Introduce new calculator for rising, transit and setting times ([#148])
* Clean code after Ephem refactoring ([#152])
* Improve `RisingTransitSettingEventsCalculator` ([#155])
* Simplify `RisingTransitSettingEventsCalculator` ([#156])
* Lazy-load reference frames ([#157])
* Overall performance improvements ([#163])
* Add support for IMCCE INPOP by @JoelQ and @rhannequin ([#166])
* Update INPOP excerpt in spec data ([#167])
* Introduce a better rise/transit/set calculator ([#168])
* Drop `Astronoby::Observer#observe` ([#174])

### Improvements

* Bump standard from 1.42.1 to 1.49.0 by @dependabot ([#123], [#128], [#150], [#165])
* Bump rubyzip from 2.3.2 to 2.4.1 by @dependabot ([#120])
* Add more tests for Julian Date conversion ([#122])
* Upgrade main Ruby version and supported ones ([#125])
* Update email address and gem description ([#126])
* Increase precision of mean obliquity ([#133])
* Add supported Rubies ([#139])
* Set Ruby 3.4.2 as default version ([#140])
* Fix dependency secutiry patch ([#151])
* Improve HMS/DMS formats ([#153])
* Use excerpts ephemerides for specs of Sun and Moon ([#154])
* Add link to deprecated documentation ([#160])
* Default Ruby 3.4.3 and support recent rubies ([#169])
* Better Moon phases test coverage ([#172])
* Optimize Observer with GMST from Instant ([#173])
* Update README about documentation location ([#175])
* Add GitHub Actions permissions ([#176])

### New Contributors

* @valeriy-sokoloff made their first contribution in #124
* @JoelQ made their first contribution in #166

**Full Changelog**: v0.6.0...v0.7.0

[#120]: #120
[#121]: #121
[#122]: #122
[#123]: #123
[#124]: #124
[#125]: #125
[#126]: #126
[#127]: #127
[#128]: #128
[#129]: #129
[#130]: #130
[#131]: #131
[#132]: #132
[#133]: #133
[#134]: #134
[#135]: #135
[#136]: #136
[#137]: #137
[#138]: #138
[#139]: #139
[#140]: #140
[#141]: #141
[#142]: #142
[#143]: #143
[#145]: #145
[#146]: #146
[#147]: #147
[#148]: #148
[#149]: #149
[#150]: #150
[#151]: #151
[#152]: #152
[#153]: #153
[#154]: #154
[#155]: #155
[#156]: #156
[#157]: #157
[#160]: #160
[#163]: #163
[#165]: #165
[#166]: #166
[#167]: #167
[#168]: #168
[#169]: #169
[#172]: #172
[#173]: #173
[#174]: #174
[#175]: #175
[#176]: #176
[UPGRADING.md]: https://github.com/rhannequin/astronoby/blob/main/UPGRADING.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant