I'm writing an application that draws maps of night sky that can be visible from other planets (ultimately they are to be exoplanets). Mostly I do it out of curiosity :).

I's thinking a lot where I should put my question and I've choose the physics SO, because I think my problem is more physical in nature than a purely software design.

My program takes into consideration below orbital parameters:

  • Axial tilt
  • Longitude of ascending node
  • Inclination
  • Ascending node of the planet's equator

I specifically have chosen a star data source so it has got these properties:

  • its X axis points at the Earth's vernal equinox point,
  • its Z axis points at Polaris (I mean the north pole on the celestial sphere)

The algorithm makes a sky by doing a series of rotations of the star data. I assumed it would be enough to rotate using above orbital parameters and put the planet in the center of the star system (from mathematical stand point it doesn't matter where a planet is but its orientation). These rotations are done like this:

  1. nivelate the Earth's axial tilt by rotating around X axis by 23°
  2. make an A vector by rotating a vector pointing at +X axis around +Z axis by the planet's "Equator asc. node"
  3. rotate around the A vector by the planet's axial tilt
  4. make a B vector by rotating a vector pointing at (new) +X axis by the planet's "Long. of asc. node"
  5. rotate around the B vector by the planet's Inclination

Rotation animation

My program works in a way, but yet it is still not perfect. Let's take for example the Uranus night sky:

Uranus north sky

According to the Wikipedia Uranus's north pole star is 35Eta Oph which on my map is a quite above the center.

I believe I didn't consider yet another orbital parameter in my calculations, but I'm not sure what it is.

(For those who want there is my app: https://github.com/felix-leg/ExPlanetNightSkyGenerator )


During my research I found an IAU paper. It hasn't gave my the answer I'm was looking for, but it left me with another question: what's the invariable plane?

In my program I assumed the Invariable plane is just the plane where the Earth orbit lies and all I have to do to make my data's Z axis pointing in the same direction like the IP "up" vector is to nivelate Earth axial tilt.

But now I'm not sure. The IAU paper mentions there are two standards: old B1950 and new J2000. It also mentions that some data about Solar system planets was made when the old one has been applied and some other data when the new one had been taking effect.

So, I reformulate my question: In relation to WHAT are my orbital parameters (axial tilt, longitude of ascending node, inclination, and equator's ascending node) written in astronomical sources?

  • $\begingroup$ As a reference, you should check the similar functionality in Stellarium. $\endgroup$ Commented Feb 16, 2022 at 14:31
  • $\begingroup$ @EmilioPisanty my quick glide over Stellarium source code shows they just hard coded corrections and positions of each planet's north pole. In other words: they know beforehand what is a celestial north pole for each planet (probably from some external source). I want my program to find it by calculations :( $\endgroup$
    – Felix.leg
    Commented Feb 16, 2022 at 15:13

1 Answer 1


All right I found where lies the problem. I made a (very) silly mistake.

TL;DR — double check you test data


According to the Wikipedia Uranus' axial tilt is 97.77° and its north star is 35Eta Oph. However I've found a webpage which states the axial tilt of ~97° is outdated and should be equal to about 82°. No, the planet didn't suddenly "flipped over", it is the IAU's definition of the planet's north pole that has been changed.

In other words on Wikipedia (and some other encyclopedias too) half of data comes from before the IAU's redefinition and other half from after it.

With the new data my app produces this result:

new Uranus north pole

So, my app was working right all the time, it's the test data that's wrong.


I haven't wrote it in the original post, but I also tested my app with Mercury. The error was smaller, yet still significant as 47Omi Dra also didn't wanted to "jump in" the right coordinates. It was like that until...I added minus sign to the axial tilt value of 7.005°.


Dave Gremlin mentioned another app called Celestia. I'm familiar with this program so much, that I in fact got some of test data from Celestia's configuration files.

However I haven't spot one thing: for example the entry for Mercury is:

CustomOrbit "vsop87-mercury"

# Overridden by CustomOrbit
# EllipticalOrbit {
#    Period            0.2408
#    SemiMajorAxis     0.3871
#    Eccentricity      0.2056
#    Inclination       7.0049
#    AscendingNode    48.33167
#    LongOfPericenter 77.456
       #    MeanLongitude   252.251
# }

Long story short, in this configuration there are two sources of data that the Celestia uses. One of it, at the top, is what Celestia uses now: a hardcoded in the app vsop87-mercury. The other one is the commented out text block below. Probably during the developing of Celestia the app used at first that text block (then not in comments), but at some point in time the developers switched to the hardcoded one.

It didn't occurred to me that the block may contain very old data and was kept in the configuration file for a very long time. And thus, I shouldn't trust that data anymore.

Celestia has been for a very long time and has got a long road of developing behind it. Unfortunately lately there is not much going on with this app, which means updates for it may be sparse.


I should make the test data based on what IAU uses for calculating the north poles of the solar system's planet. In my defense I can say that it is very hard to find it, as as soon I put "IAU" in the search bar, Google starts to think I'm looking for Pluto only :(


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.