![]() | |
Source file: mapper.py | |
Directory: /var/www/html/clawpack/links/awr10/radial-ocean-island | |
Converted: Thu Jul 29 2010 at 13:49:17 using clawcode2html | |
This documentation file will not reflect any later changes in the source file. |
from pylab import * from pyclaw.data import Data def latlong(d,theta,phi,Rearth): """ Take a point at distance d from the North pole with longitude theta and return longitude and latitude of point after rotating pole down to latitude phi. Applying this function to a set of points on a circle of radius d will result in points that are equi-distant (distance d on the earth) from the point at latitude phi, longitude 0. Used to construct a radially symmetric ocean on the earth and place gauges, islands, etc. """ # Convert phi to radians: theta = theta * pi/180. phi = phi * pi/180. alpha = pi/2. - d/Rearth # latitude of original point # x,y,z coordinates of this point on the earth: x1 = cos(alpha)*cos(theta) y1 = cos(alpha)*sin(theta) z1 = sin(alpha) # rotate so centered at latitude phi: x2 = x1*sin(phi) + z1*cos(phi) y2 = y1 z2 = -x1*cos(phi) + z1*sin(phi) # compute longitude xhat and latitude yhat: xhat = -arctan(y2/x2) yhat = arcsin(z2) # convert to degrees: xhat = xhat * 180./pi yhat = yhat * 180./pi return xhat,yhat def plot_ocean_and_shelf(d1=1580e3, d2=1645e3, phi=40.): theta = linspace(0, 360., 200) d = d1*ones(theta.shape) xhat, yhat = latlong(d, theta, phi) clf() plot(xhat,yhat,'b') hold(True) d = d2*ones(theta.shape) xhat, yhat = latlong(d, theta, phi) plot(xhat,yhat,'r') legend(['Continental shelf', 'Shoreline'],loc='lower left') (xi1,yi1) = latlong(1600.e3,220.,40.) plot([xi1],[yi1],'ko') (xi2,yi2) = latlong(1600.e3,260.,40.) plot([xi2],[yi2],'ko') axis('scaled') xlim([-20, 20]) ylim([15, 60])