An Applied Computational Geometry Demo
By Omar Hesham [April 2010] - Last modified March 2016.
In this demo we present a two-part visualization of P.L. Robinson's "The Sphere Is Not Flat" published in the February 2006 issue of the American Mathematical Monthly, in which he presented a simple proof of the fact that the earth is not flat (i.e. if you project any part of the earth onto a two-dimensional plane, then distances must be distorted). - Yes, that includes Google Maps (gasp!). Google Earth is fine though...
Once you've completed Part I, head over to the fun side in Part II.
Here's where you can explore these concepts and experience the non-isometric properties yourself. In this simple doodle, you can create points in the Eudliean space, and watch as they get mapped onto a spherical surface. Now you can compare the relavant distances and come up with examples yourself to demonstrate how cannot be preserved.
Controls:
Left Mouse Click - Create dot
Click and Drag (in 2D View ) - Drag the dot around
Click and Drag (in Sphere View) - Rotates the camera
MouseWheel (in Sphere view) - Zoom In/Out
Doubleclick - Delete the dot
Ctrl - Show/Hide Euclidean plane grid
Shift - Switch sphere shading mode
Applet
Euclidean 2D Plane (Reference Radius = π) |
Sphere (Unit Sphere, Radius = 1) |
Math behind the scenes
In essence, the mapping function works to maintain the distance from every new point you create, to the reference orange node (in both views). So the distance between the points themselves are different, hence the mapping is not isometric. For every point p in the 2D plane, and its corresponding Sphere point q:
distance(referenceDotIn2D, p) = distance(referenceDotInSphere, q)
given that a distance in 2D space is defined as the length of the straight line connecting two points, and the distance on a Sphere is measured as the length of the shortest great circular arc between them.
Coordinate mapping:
Euclidean 2D Plane (Reference Radius = π) |
Sphere (Unit Sphere, Radius = 1) |
r =distance from origin = sqrt(x^2 + z^2) | R = r |
x coordinate | X = sin(R) * (x/r) |
y coordinate (= Zero) | Y = cos(R) |
z coordinate | Z = sin(R) * (z/r) |
Future Development
Source Code & Resource