Skip to main content

Proud to be part of LJMU,
in partnership with the Dill Faulkes Educational Trust

 

'; print 'UK'; // Use lat and longitude to find the pixel position of the postcode. // Based on code in gps2pgm.c (part of AMNs GPS code) $lonmin = -11.0; $lonmax=2.1; $latmin=48.2; $latmax=61.1; $pixscale = 93.65; // X-axis is Longitude. Need to correct for latitude $loncorr = ($latmax + $latmin) / 2.0; // Average latitude (a bit wierd if one is -ive and one +ive, but OK) $loncorr = cos(3.1416/180.0 * $loncorr); // X-axis (correct for latitude using the global correction value) $d = ($lng-$lonmin) * $loncorr * (3600.0 / $pixscale); $i = intval(floor($d+0.5)); /* Y-axis (no problems with curvature scaling) */ $d = ($lat-$latmin) * (3600.0 / $pixscale); /* Convert to pixels */ $j = intval(floor($d+0.5)); // Extra "+5" are bodges that seem to work... print 'You'; print '

' . PHP_EOL; print '

We can estimate the size of the Earth by seeing how far away you are from somewhere nearer the equator where the Sun was directly overhead at the time you took your measurements. You can see how this works in detail here.' . PHP_EOL; print '

Shadow Stick
The angle A
' . PHP_EOL; print '

Your shadow of '.intval($shadlen).' cm from a stick '.intval($sticklen).' cm tall made an angle of '.intval($angle+0.5).'o to the stick (the angle A in the diagram).'; print '
This means that the distance between where you are and where the Sun was exactly overhead is '.intval((100.0*$angle/360.0)+0.5).'% of the way around the globe.'; print '

We also know from your postcode that if you wanted to go to where the Sun was overhead, you would have to walk south for '.$dist.' km.'; // Final circum for printing to nearest 100km $cprint = (100*intval(($circum/100.0)+0.5)); print '

That means that all the way around the world - the circumference - would be '.$cprint.' km and the diameter of the Earth would be '.(100*intval((2*$radius/100)+0.5)).' km' . PHP_EOL; // Print a message based on how close this is to the real value. $circerr = $circum / 40000.0; // REally big if($circerr > 1.2) { print '

Since the actual circumference of the Earth is 40000 km your estimate of '.$cprint.' km is quite large. It is quite common for scientists to get results that do not really fit, and when that happens they go back and redo the experiment again just to be sure that they have not made a mistake. Perhaps you would like to try that?'; // Really small } else if($circerr < 0.80) { print '

Since the actual circumference of the Earth is 40000 km your estimate of '.$cprint.' km is quite small. It is quite common for scientists to get results that do not really fit, and when that happens they go back and redo the experiment again just to be sure that they have not made a mistake. Perhaps you would like to try that?'; // quite big } else if($circerr > 1.1) { print '

Since the actual circumference of the Earth is 40000 km your estimate of '.$cprint.' km is perhaps a bit large but really quite close.'; // quite small } else if($circerr < 0.90) { print '

Since the actual circumference of the Earth is 40000 km your estimate of '.$cprint.' km is perhaps a bit small but really quite close.'; } else { print '

Since the actual circumference of the Earth is 40000 km your estimate of '.$cprint.' km is really very close.'; } print '

If you want to see exactly how we worked this out, the full working is below.

'.PHP_EOL; print '

' . PHP_EOL; print '

Using lots of results

' . PHP_EOL; print '

Whenever a scientist makes a measurement, there are always things that she cannot get exactly right, so the final number is never perfect. We call that small imperfection an error and all measurements have them.'; print '

Your measurement will also have an "error" - maybe the ground was not exactly flat, or the shadow was bit too fuzzy to see exactly where the end was and so on. You cannot do anything about this, so your answer will never be perfect, even if it is pretty good!' . PHP_EOL; if($circer > 0) { print ' However, if your number is a bit too large, somebody else might have an answer that is a bit too small.'; } else { print ' However, if your number is a bit too small, somebody else might have an answer that is a bit too large.'; } print ' So, if we get lots of results and average them, all the errors will start to cancel out, and the final value will be much better than any single answer could possibly be.'; print '

This is why we want to collect as many measurements as possible. If you want to see what the final result is, come back in a few days when we have all the measurements in!' . PHP_EOL; // NB For info: // Greenwich Obs: 51 28' 40"N = 51.4778 // Tropic of Cancer: 23.43663 // Diff: 28.0411deg // Dist: 28.0411 * 111.3 = 3121 km (call it 3120km) print '


' . PHP_EOL; print '' . PHP_EOL; print '

How we calculated your answer

' . PHP_EOL; print '

With any scientific result it is important to know how the answer was worked out, so here is a step-by-step description of the working to get your estimate of the size of the Earth

' . PHP_EOL; print '

In order to get an answer, we actually need not one shadow but two - both measured at the same time, and one much further south than the other like this:'.PHP_EOL; print '

Using the angles of two shadow sticks to find the size of the Earth
'; print '

You cannot do this with just your shadow but, if you know what a shadow would be like at a suitable place and time, you do not need to actually measure it. Fortunately we know (as did ancient astronomers like Eratosthenes) that on the summer Solstice, the Sun will be exactly overhead in the middle of the day anywhere along the Tropic of Cancer (which is an imaginary line which runs round the world a bit north of the Equator).' . PHP_EOL; print '

From Greenwich to the Tropic of Cancer
The distance from the Greenwich Observatory
to the Tropic of Cancer
'.PHP_EOL; print '

So, as you have taken your measurement near to the Solstice (which is the 21st June 2023) and around the middle of the day (1PM British Summer Time), we can use an imaginary second stick due south of the UK on the Tropic of Cancer - right in the middle of the Algerian desert

'.PHP_EOL; print '

In Eratothenes\' day he had to rely on people keeping records of their travels over many weeks to work out the distance between places, but we are much luckier as explorers and cartographers have been making maps for hundreds of years, so we can just use them to find distances. For this experiment we are using two maps: a small scale map to find the distance from one place in the UK to the Tropic of Cancer (we chose the Greenwich Observatory in London) and a larger scale map of the UK to find out how far north or south you are from Greenwich. Using the two together, we can work out how far north you are from the Tropic.

'.PHP_EOL; print '

Step by Step

'.PHP_EOL; print '
    '.PHP_EOL; $distgwch = $dist - 3120; print '
  1. Using your postcode and the large scale map of the UK we know that you are about '.(abs($distgwch)).' km'; if($distgwch < 0) { print ' south '; } else { print ' north '; } print 'of the Greenwich Observatory.
  2. '; print '
  3. So your total distance from the Tropic of Cancer (d) is 3120 '; if($distgwch < 0) { print ' - '; } else { print ' + '; } print ' '.abs($distgwch).' = '.$dist.' km.
  4. '.PHP_EOL; print '
  5. Next we need to know the angle of your shadow A. Since we have a right-angled triangle, then:
    '; print ' tan(A) = shadow length / stick height
     tan(A) = '.$shadlen.' / '.$sticklen.'
    '; print ' So A = tan-1('.$shadlen.' / '.$sticklen.') = '.$angle.'o.
  6. '.PHP_EOL; print '
  7. Since the imaginary stick on the Tropic of Cancer has the Sun directly overhead, the angle B is zero, so angle C is the same as angle A ('.$angle.'o).
  8. '.PHP_EOL; $angpc = intval((100.0*$angle/360.0)+0.5); print '
  9. '.$angle.'o is '.$angpc.'% of 360o, so the distance between you and the Tropic of Cancer is '.$angpc.'% of the way around the globe.
  10. '.PHP_EOL; print '
  11. So the total circumference of the Earth from your measurements is:
    '; print ' Circumference = d x 360 / A
    '; print '      = '.$dist.' x 360 / '.$angle.'
    '; $ctmp = $dist * 360.0 / $angle; print '      = '.intval($ctmp+0.5).' km.
  12. '.PHP_EOL; print '
  13. Finally, rounding to the nearest 100km gives your estimate of the circumference of the Earth as '.$cprint.' km.
  14. '; print '
'.PHP_EOL; ?>