How to find the local azimuth of the highest point of the ecliptic

I would like to use pyephem or skyfield1 to find the degree of the local horizon (starting from South = 0°) at which is located the highest point of the ecliptic.

Note that I am not trying to find the culmination of a planet. It could well be that, when looking South, there is no planet on the ecliptic by that time/latitude, but there will still be a highest point of the ecliptic. Can anyone help?

1Skyfield is preferred over PyEphem for new projects for several reasons

• I use Skyfield a lot, but only starting from ephemeris positions of objects. I think you can somehow use rhodesmill.org/skyfield/searches.html but I don't know how exactly. I'm a little confused though, doesn't the highest point of anything end up being exactly South at some point during a 24 hour cycle, or do you mean highest at a specified time? – uhoh Feb 17 at 1:31
• "doesn't the highest point of anything end up being exactly South at some point during a 24 hour cycle" -- the culmination of a planet is indeed always when it crosses the meridian, i.e. South, but this culmination of a specific planet is not necessarily the highest point of the ecliptic. It can happen but, most of the time it does not. You can quickly see that with Stellarium. – Cirédérf Eniomel Feb 17 at 13:16
• I edited my answer, after realizing several hours later that the answer is far simpler than I had imaged. No hand-written spherical trigonometry necessary, only a bit more imagination than I used the first time! – Brandon Rhodes Feb 18 at 0:09

Edit:

Getting the exact value winds up being simple, but it was only later in the day that the answer occurred to me. All we need to do is ask for the altitude and azimuth of the Ecliptic’s south pole! The ecliptic itself will be highest above our horizon in exactly that direction, at an altitude that is exactly 90° above its pole.

Thus the answer is given by the coordinates of a single vector:

from skyfield import api, framelib
from skyfield.positionlib import Apparent

t = ts.utc(2021, 2, 16, 22, 52)
bluffton = api.Topos('40.74 N', '84.11 W')

f = framelib.ecliptic_frame
r = api.Distance([0, 0, -1])
v = api.Velocity([0, 0, 0])

p = Apparent.from_time_and_frame_vectors(t, f, r, v)
p.center = bluffton

alt, az, distance = p.altaz()

print('Altitude of highest point on ecliptic:', alt.degrees + 90.0)
print('Azimuth of highest point on ecliptic:', az.degrees)


Altitude of highest point on ecliptic: 67.54977465183501
Azimuth of highest point on ecliptic: 162.61593086793783


— is far more exact, and faster to compute, than my first try. Enjoy!

While it’s likely that someone will soon jump in with a closed-form solution that uses spherical trigonometry — in which case it’s likely that Skyfield or PyEphem will only be used to determine the Earth orientation — here’s a quick way to get an answer within about a degree:

1. Generate the ecliptic as 360 points one degree apart across the sky.
2. Compute the altitude and azimuth of each one.
3. Choose the highest.

The result agrees closely to what I see if I open Stellarium, turn on the ecliptic, and choose a field star right near the point where the ecliptic reaches the highest point in the sky.

import numpy as np
from skyfield import api, framelib
from skyfield.positionlib import Apparent

𝜏 = api.tau
bluffton = api.Topos('40.74 N', '84.11 W')

t = ts.utc(2021, 2, 16, 22, 52)

angle = np.arange(360) / 360.0 * 𝜏
zero = angle * 0.0

f = framelib.ecliptic_frame
d = api.Distance([np.sin(angle), np.cos(angle), zero])
v = api.Velocity([zero, zero, zero])

p = Apparent.from_time_and_frame_vectors(t, f, d, v)
p.center = bluffton

alt, az, distance = p.altaz()

i = np.argmax(alt.degrees)  # Which of the 360 points has highest altitude?
print('Altitude of highest point on ecliptic:', alt.degrees[i])
print('Azimuth of highest point on ecliptic:', az.degrees[i])


The result:

Altitude of highest point on ecliptic: 67.5477569215633
Azimuth of highest point on ecliptic: 163.42529398930515


This is probably a computationally expensive enough approach that it won’t interest you once you or someone else does the spherical trigonometry to find an equation for the azimuth; but at the very least this might provide numbers to check possible formulae against.

• I would give you 2 votes if I could. Well done! – JohnHoltz Feb 18 at 1:50