In my recent post about calculating the speed of light, I mentioned Ole Roemer's calculation in 1676. The basic idea uses the orbit of one of Jupiter's moons. The orbital period is constant, but there is a slight variation as seen from the Earth. The common explanation is that the variation in the observed orbital period of the moon is due to the changing distance from the Earth to Jupiter. That does indeed make sense, but it probably isn't the way it really happened.

Although I liked my little picture of Jupiter-Earth and my description of the whole thing, I still want more. Let's look at two models that show how you would observe the period of moon's orbit around Jupiter.

Building a Model

Of course I am going to use python to create this model—that's just what I do. The first part of the model is to create two planets orbiting the Sun. I'm not actually going to use the Earth and Jupiter because of scaling problems. Instead, I'm just going to make two objects orbiting some other object (the Sun). Of course, I could calculate the gravitational force on each planet and use the momentum principle—but I'm not going to do that. Instead, I will just make the two objects move in circles.

Suppose I have a planet in a circular orbit. The only force is the gravitational force that decreases as a one over distance squared magnitude. This force makes the planet accelerate as it turns in a circular path. Setting the force equal to the mass times the circular acceleration, I can solve for the angular velocity of the planet.

Now that I have the angular velocity of the planet, I can just calculate its position in each time step as:

Really, it doesn't matter what values you use for G and M. For my two planets, I am going to pick the "Earth" to have an orbital radius of 10 units and an angular velocity of 1 rad/s. Now I need to find the angular velocity of my "Jupiter". Suppose it is at some orbital distance of r j . It should also have an angular velocity of:

Here I have the angular velocity of the second planet in terms of the angular velocity of the first planet. That way I don't even need to know the value of G or the mass of the Sun (M).

This will now give me two mostly physically correct orbiting planets. Here's what that looks like.

Of course that's not to scale, but it's a great place to start. Now I want to shoot a pulse of light from Jupiter to the Earth. How do you do that? If I start with a ball at Jupiter, I can find the direction from Jupiter to the Earth. However, if the speed of light is slow enough the Earth will have moved significantly by the time the light gets to that position. The light would miss. I need to correct for this motion.

Suppose the light is traveling at a speed c—it doesn't really matter the value of the speed of light. I can first aim at where the Earth is at and use that to calculate the time of travel for the light. With that time, I can determine the new position of the Earth and aim there.

If the speed of light is low enough, this still won't work. Now I have a new distance that the light will travel making it take more (or less) time. The solution is to just make a second order correction for the aim of light with the new travel time. Really, you could keep making better and better estimates but I think this should be enough.

One last thing I need to include in my model. I need to pick a rate at which to shoot light from Jupiter to the Earth. Shooting light is like viewing a completed moon orbit. Just to make the program a little bit easier I will choose an orbital period that is a little bit longer than the longest possible flight time for the trip from Jupiter to the Earth. This way there will only be one object of light traveling between planets at any given time.

Speed of Light Based on Distance to Jupiter

Here is what I have. This uses some arbitrary speed of light (which you can change if you like).

If you want to play with it, you can try changing the value of c—and use this link to see the code. In this example, it is set to 100 units/s.

But how do I get the speed of light from this model? Suppose I record the time it takes the signal to get from Jupiter to Earth and plot that only with the distance from Jupiter to Earth? Here is what that looks like.

This is a mostly linear plot with a slope of 98.3 m/s (or whatever you want to call the distance and time units). But wait! Shouldn't the slope be the speed of light at 100 m/s? Well, it should be but it's not. You can see that the data makes an oblong shape. When the Earth is moving away from Jupiter, you get a slightly different value for the distance and time than when moving towards Jupiter. You could fix this problem by increasing the fake speed of light. The faster the light speed, the closer the data gets to a straight line.

The distance method for calculating the speed of light is the one I used before. It's also the one you see on other websites. However, it's probably not the way it actually happened.

Speed of Light Based on Relative Earth-Jupiter Velocity

In 1676, Ole Roemer didn't really care about the speed of light. He cared about winning a prize to determine the longitude of a ship. The best way to do this was to use a very accurate clock—which didn't exist. Ole Roemer decided to use the moons of Jupiter as his accurate clock—and this is where he found a problem.

The only way you could use the distance method for finding the speed of light is if you knew the exact time that the light left from Jupiter to travel to Earth. That's not what Ole Roemer did. Instead he used two times. The time that Io (a moon of Jupiter) was eclipsed by Jupiter and the time it was uneclipsed (is that actually a word)? Roemer then looked at the time difference between these two events.

In order to understand the problem, let's consider a one dimensional system with Jupiter and the Earth. I'll put Jupiter at x = 0 and it will be stationary. The Earth can then move towards and away from Jupiter.

There are two pulses of light sent from Jupiter at different times (with a time difference of T) as the Earth moves away. Now I will sketch a plot of the the position of both light pulses and the Earth as a function of time.

Since the Earth is moving away during the time between the first and second pulse of light, it will measure a slightly longer time interval—I call this T'. I can solve for this observed time difference by looking at three equations—two for the pulses of light (I will call the position of the light L 1 and L 2 ) along with the position of the Earth (just call it x).

Notice that I am using c for the speed of light and v for the speed of Earth. I can solve for the intersection between light 1 and the Earth and call this t 1 . The intersection between the Earth and light 2 will be t 2 . The difference between these two times will be T'. I'll skip the algebraic steps, but it's not too difficult to show that the observed time interval will be:

Just a couple of quick checks on this expression:

Does it have units of time? Yes.

What about the case of a stationary Earth? The observed time interval should be T. Put in v = 0 and you do get T.

What if the Earth is moving towards Jupiter? Just put in a negative v and it seems to work.

One problem—this isn't the best form to show the relationship between v and T'. If I do a Tayler series expansion, I can approximate the observed time interval (for small v) as:

Just check. Does this approximation still agree with the checks above? Yes. Better yet, it's now a linear function between the observed time interval and the velocity of the Earth.

OK, now let's modify our calculations from the computer model. Instead of just recording the time that the Earth receives a light pulse, I will record the time between pulses (but the planets and light looks the same as before). Here is a plot of the observed time difference between pulses as a function of the relative velocity between the Earth and Jupiter.

The slope of this linear function should be the actual time interval over the speed of light. Using this, I get a light speed of 84.9 m/s. Yes, this is lower than the actual speed of 100 m/s. Why? I'm not completely sure. I guess it has to do with the fact that I plot the average relative velocity instead of the instantaneous. But also have a very small speed of light and perhaps my assumption that the Earth's velocity is small isn't really valid. Still, it mostly works.

Also, you can see that at a relative velocity of zero, you get the actual period. When the Earth is moving away from Jupiter, you get a lower observed period than when it is moving towards. Apparently, this is what Ole Roemer looked at—the difference in observed period while moving towards and away from Jupiter. His calculated value for the speed of light was indeed off by a little bit, but it was a great estimate and showed that the speed of light was finite even though it was really fast.