Skip to content

Deep Sky Object: difference between the body and the position#227

Merged
rhannequin merged 1 commit intomainfrom
deep-sky-object-position-class
Oct 21, 2025
Merged

Deep Sky Object: difference between the body and the position#227
rhannequin merged 1 commit intomainfrom
deep-sky-object-position-class

Conversation

@rhannequin
Copy link
Owner

@rhannequin rhannequin commented Oct 17, 2025

In the same way using Astronoby::Jupiter.new enables to get the position of the planet in multiple reference frames for a given instant, it is necessary to provide an API as convenient for deep-sky objects.

Previously, it was only possible to instantiate the body and its position at the same time, having to provide all the information at once. Not only this makes things less convenient to get the position at different instants, it also requires the code to know about all the attributes constantly. In a next PR we will handle using deep-sky objects in services like the RiseTransitSetCalculator and the current implementation of DeepSkyObject makes things hard.

Now, with a difference between the body (DeepSkyObject) and the position (DeepSkyObjectPosition), it is possible to manipulate the body accross the code and instantiate it (get a position) whenever necessary.

time = Time.utc(2025, 10, 1)
instant = Astronoby::Instant.from_time(time)

vega_j2000 = Astronoby::Coordinates::Equatorial.new(
  right_ascension: Astronoby::Angle.from_hms(18, 36, 56.33635),
  declination: Astronoby::Angle.from_dms(38, 47, 1.2802),
  epoch: Astronoby::JulianDate::J2000
)

# Build the body for star Vega
# Represents the star itself, not its position
vega = Astronoby::DeepSkyObject.new(equatorial_coordinates: vega_j2000)

# Build the position of star Vega for a given instant
vega_position = vega.at(instant)

vega_position.apparent.equatorial.right_ascension.str(:hms)
# => "18h 37m 48.2804s"

@rhannequin rhannequin self-assigned this Oct 17, 2025
@rhannequin rhannequin force-pushed the deep-sky-object-topocentric-position branch from 4d830e7 to 72e5ae5 Compare October 21, 2025 07:36
Base automatically changed from deep-sky-object-topocentric-position to main October 21, 2025 08:02
In the same way using `Astronoby::Jupiter.new` enables to get the
position of the planet in multiple reference frames for a given instant, it
is necessary to provide an API as convenient for deep-sky objects.

Previously, it was only possible to instantiate the body and its
position at the same time, having to provide all the information at
once. Not only this makes things less convenient to get the position at
different instants, it also requires the code to know about all the
attributes constantly. In a next PR we will handle using deep-sky
objects in services like the `RiseTransitSetCalculator` and the current
implementation of `DeepSkyObject` makes things hard.

Now, with a difference between the body (`DeepSkyObject`) and the
position (`DeepSkyObjectPosition`), it is possible to manipulate the
body accross the code and instantiate it (get a position) whenever
necessary.
@rhannequin rhannequin force-pushed the deep-sky-object-position-class branch from f36d3b6 to 2b703d1 Compare October 21, 2025 08:03
@rhannequin rhannequin merged commit d68a5a1 into main Oct 21, 2025
43 checks passed
@rhannequin rhannequin deleted the deep-sky-object-position-class branch October 21, 2025 08:32
@rhannequin rhannequin mentioned this pull request Oct 25, 2025
rhannequin added a commit that referenced this pull request Oct 31, 2025
## 0.9.0 - 2025-10-31

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

### Features

* Add `#approaching_primary?` and `#receding_from_primary?` to solar system bodies ([#211])
* Calculate apoapsis and periapsis events ([#213])
* Improve precision of ΔT ([#219])
* Deep Sky Object: Compute astrometric position ([#217])
* Deep Sky Object: Compute apparent position ([#220])
* Deep Sky Object: Handle velocities properly ([#222])
* Deep Sky Object: Compute topocentric position ([#226])
* Deep Sky Object: difference between the body and the position ([#227])
* Deep Sky Object: Add support for RiseTransitSetCalculator ([#228])

### Improvements

* Drop `Astronoby::Apparent#angular_diameter` ([#221])
* Bump rubyzip from 3.0.2 to 3.2.1 by @dependabot ([#210], [#215], [#223], [#233])
* Bump standard from 1.50.0 to 1.51.1 by @dependabot ([#212], [#214])
* Be proud about the precision achieved ([#218])
* Use local apparent instead of local mean sidereal time for hour angle ([#225])
* Bump rspec from 3.13.1 to 3.13.2 by @dependabot ([#229])
* Bump benchmark from 0.4.1 to 0.5.0 by @dependabot ([#230])
* Add documentation for deep-sky objects ([#232])
* Bump rake from 13.3.0 to 13.3.1 by @dependabot ([#235])

### Backward-incompatible changes

* Drop `Astronoby::Apparent#angular_diameter` ([#221])
* Use local apparent instead of local mean sidereal time for hour angle ([#225])

**Full Changelog**: v0.8.0...v0.9.0

[#210]: #210
[#211]: #211
[#212]: #212
[#213]: #213
[#214]: #214
[#215]: #215
[#217]: #217
[#218]: #218
[#219]: #219
[#220]: #220
[#221]: #221
[#222]: #222
[#223]: #223
[#225]: #225
[#226]: #226
[#227]: #227
[#228]: #228
[#229]: #229
[#230]: #230
[#232]: #232
[#233]: #233
[#235]: #235
[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