aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/coordsys.spad.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/coordsys.spad.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/algebra/coordsys.spad.pamphlet')
-rw-r--r--src/algebra/coordsys.spad.pamphlet240
1 files changed, 240 insertions, 0 deletions
diff --git a/src/algebra/coordsys.spad.pamphlet b/src/algebra/coordsys.spad.pamphlet
new file mode 100644
index 00000000..1dc91964
--- /dev/null
+++ b/src/algebra/coordsys.spad.pamphlet
@@ -0,0 +1,240 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra coordsys.spad}
+\author{Jim Wen, Clifton J. Williamson}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{package COORDSYS CoordinateSystems}
+<<package COORDSYS CoordinateSystems>>=
+)abbrev package COORDSYS CoordinateSystems
+++ Author: Jim Wen
+++ Date Created: 12 March 1990
+++ Date Last Updated: 19 June 1990, Clifton J. Williamson
+++ Basic Operations: cartesian, polar, cylindrical, spherical, parabolic, elliptic,
+++ parabolicCylindrical, paraboloidal, ellipticCylindrical, prolateSpheroidal,
+++ oblateSpheroidal, bipolar, bipolarCylindrical, toroidal, conical
+++ Related Constructors:
+++ Also See:
+++ AMS Classifications:
+++ Keywords:
+++ References:
+++ Description: CoordinateSystems provides coordinate transformation functions
+++ for plotting. Functions in this package return conversion functions
+++ which take points expressed in other coordinate systems and return points
+++ with the corresponding Cartesian coordinates.
+
+CoordinateSystems(R): Exports == Implementation where
+
+ R : Join(Field,TranscendentalFunctionCategory,RadicalCategory)
+ Pt ==> Point R
+
+ Exports ==> with
+ cartesian : Pt -> Pt
+ ++ cartesian(pt) returns the Cartesian coordinates of point pt.
+ polar: Pt -> Pt
+ ++ polar(pt) transforms pt from polar coordinates to Cartesian
+ ++ coordinates: the function produced will map the point \spad{(r,theta)}
+ ++ to \spad{x = r * cos(theta)} , \spad{y = r * sin(theta)}.
+ cylindrical: Pt -> Pt
+ ++ cylindrical(pt) transforms pt from polar coordinates to Cartesian
+ ++ coordinates: the function produced will map the point \spad{(r,theta,z)}
+ ++ to \spad{x = r * cos(theta)}, \spad{y = r * sin(theta)}, \spad{z}.
+ spherical: Pt -> Pt
+ ++ spherical(pt) transforms pt from spherical coordinates to Cartesian
+ ++ coordinates: the function produced will map the point \spad{(r,theta,phi)}
+ ++ to \spad{x = r*sin(phi)*cos(theta)}, \spad{y = r*sin(phi)*sin(theta)},
+ ++ \spad{z = r*cos(phi)}.
+ parabolic: Pt -> Pt
+ ++ parabolic(pt) transforms pt from parabolic coordinates to Cartesian
+ ++ coordinates: the function produced will map the point \spad{(u,v)} to
+ ++ \spad{x = 1/2*(u**2 - v**2)}, \spad{y = u*v}.
+ parabolicCylindrical: Pt -> Pt
+ ++ parabolicCylindrical(pt) transforms pt from parabolic cylindrical
+ ++ coordinates to Cartesian coordinates: the function produced will
+ ++ map the point \spad{(u,v,z)} to \spad{x = 1/2*(u**2 - v**2)},
+ ++ \spad{y = u*v}, \spad{z}.
+ paraboloidal: Pt -> Pt
+ ++ paraboloidal(pt) transforms pt from paraboloidal coordinates to
+ ++ Cartesian coordinates: the function produced will map the point
+ ++ \spad{(u,v,phi)} to \spad{x = u*v*cos(phi)}, \spad{y = u*v*sin(phi)},
+ ++ \spad{z = 1/2 * (u**2 - v**2)}.
+ elliptic: R -> (Pt -> Pt)
+ ++ elliptic(a) transforms from elliptic coordinates to Cartesian
+ ++ coordinates: \spad{elliptic(a)} is a function which will map the
+ ++ point \spad{(u,v)} to \spad{x = a*cosh(u)*cos(v)}, \spad{y = a*sinh(u)*sin(v)}.
+ ellipticCylindrical: R -> (Pt -> Pt)
+ ++ ellipticCylindrical(a) transforms from elliptic cylindrical coordinates
+ ++ to Cartesian coordinates: \spad{ellipticCylindrical(a)} is a function
+ ++ which will map the point \spad{(u,v,z)} to \spad{x = a*cosh(u)*cos(v)},
+ ++ \spad{y = a*sinh(u)*sin(v)}, \spad{z}.
+ prolateSpheroidal: R -> (Pt -> Pt)
+ ++ prolateSpheroidal(a) transforms from prolate spheroidal coordinates to
+ ++ Cartesian coordinates: \spad{prolateSpheroidal(a)} is a function
+ ++ which will map the point \spad{(xi,eta,phi)} to
+ ++ \spad{x = a*sinh(xi)*sin(eta)*cos(phi)}, \spad{y = a*sinh(xi)*sin(eta)*sin(phi)},
+ ++ \spad{z = a*cosh(xi)*cos(eta)}.
+ oblateSpheroidal: R -> (Pt -> Pt)
+ ++ oblateSpheroidal(a) transforms from oblate spheroidal coordinates to
+ ++ Cartesian coordinates: \spad{oblateSpheroidal(a)} is a function which
+ ++ will map the point \spad{(xi,eta,phi)} to \spad{x = a*sinh(xi)*sin(eta)*cos(phi)},
+ ++ \spad{y = a*sinh(xi)*sin(eta)*sin(phi)}, \spad{z = a*cosh(xi)*cos(eta)}.
+ bipolar: R -> (Pt -> Pt)
+ ++ bipolar(a) transforms from bipolar coordinates to Cartesian coordinates:
+ ++ \spad{bipolar(a)} is a function which will map the point \spad{(u,v)} to
+ ++ \spad{x = a*sinh(v)/(cosh(v)-cos(u))}, \spad{y = a*sin(u)/(cosh(v)-cos(u))}.
+ bipolarCylindrical: R -> (Pt -> Pt)
+ ++ bipolarCylindrical(a) transforms from bipolar cylindrical coordinates
+ ++ to Cartesian coordinates: \spad{bipolarCylindrical(a)} is a function which
+ ++ will map the point \spad{(u,v,z)} to \spad{x = a*sinh(v)/(cosh(v)-cos(u))},
+ ++ \spad{y = a*sin(u)/(cosh(v)-cos(u))}, \spad{z}.
+ toroidal: R -> (Pt -> Pt)
+ ++ toroidal(a) transforms from toroidal coordinates to Cartesian
+ ++ coordinates: \spad{toroidal(a)} is a function which will map the point
+ ++ \spad{(u,v,phi)} to \spad{x = a*sinh(v)*cos(phi)/(cosh(v)-cos(u))},
+ ++ \spad{y = a*sinh(v)*sin(phi)/(cosh(v)-cos(u))}, \spad{z = a*sin(u)/(cosh(v)-cos(u))}.
+ conical: (R,R) -> (Pt -> Pt)
+ ++ conical(a,b) transforms from conical coordinates to Cartesian coordinates:
+ ++ \spad{conical(a,b)} is a function which will map the point \spad{(lambda,mu,nu)} to
+ ++ \spad{x = lambda*mu*nu/(a*b)},
+ ++ \spad{y = lambda/a*sqrt((mu**2-a**2)*(nu**2-a**2)/(a**2-b**2))},
+ ++ \spad{z = lambda/b*sqrt((mu**2-b**2)*(nu**2-b**2)/(b**2-a**2))}.
+
+ Implementation ==> add
+
+ cartesian pt ==
+ -- we just want to interpret the cartesian coordinates
+ -- from the first N elements of the point - so the
+ -- identity function will do
+ pt
+
+ polar pt0 ==
+ pt := copy pt0
+ r := elt(pt0,1); theta := elt(pt0,2)
+ pt.1 := r * cos(theta); pt.2 := r * sin(theta)
+ pt
+
+ cylindrical pt0 == polar pt0
+ -- apply polar transformation to first 2 coordinates
+
+ spherical pt0 ==
+ pt := copy pt0
+ r := elt(pt0,1); theta := elt(pt0,2); phi := elt(pt0,3)
+ pt.1 := r * sin(phi) * cos(theta); pt.2 := r * sin(phi) * sin(theta)
+ pt.3 := r * cos(phi)
+ pt
+
+ parabolic pt0 ==
+ pt := copy pt0
+ u := elt(pt0,1); v := elt(pt0,2)
+ pt.1 := (u*u - v*v)/(2::R) ; pt.2 := u*v
+ pt
+
+ parabolicCylindrical pt0 == parabolic pt0
+ -- apply parabolic transformation to first 2 coordinates
+
+ paraboloidal pt0 ==
+ pt := copy pt0
+ u := elt(pt0,1); v := elt(pt0,2); phi := elt(pt0,3)
+ pt.1 := u*v*cos(phi); pt.2 := u*v*sin(phi); pt.3 := (u*u - v*v)/(2::R)
+ pt
+
+ elliptic a ==
+ pt := copy(#1)
+ u := elt(#1,1); v := elt(#1,2)
+ pt.1 := a*cosh(u)*cos(v); pt.2 := a*sinh(u)*sin(v)
+ pt
+
+ ellipticCylindrical a == elliptic a
+ -- apply elliptic transformation to first 2 coordinates
+
+ prolateSpheroidal a ==
+ pt := copy(#1)
+ xi := elt(#1,1); eta := elt(#1,2); phi := elt(#1,3)
+ pt.1 := a*sinh(xi)*sin(eta)*cos(phi)
+ pt.2 := a*sinh(xi)*sin(eta)*sin(phi)
+ pt.3 := a*cosh(xi)*cos(eta)
+ pt
+
+ oblateSpheroidal a ==
+ pt := copy(#1)
+ xi := elt(#1,1); eta := elt(#1,2); phi := elt(#1,3)
+ pt.1 := a*sinh(xi)*sin(eta)*cos(phi)
+ pt.2 := a*cosh(xi)*cos(eta)*sin(phi)
+ pt.3 := a*sinh(xi)*sin(eta)
+ pt
+
+ bipolar a ==
+ pt := copy(#1)
+ u := elt(#1,1); v := elt(#1,2)
+ pt.1 := a*sinh(v)/(cosh(v)-cos(u))
+ pt.2 := a*sin(u)/(cosh(v)-cos(u))
+ pt
+
+ bipolarCylindrical a == bipolar a
+ -- apply bipolar transformation to first 2 coordinates
+
+ toroidal a ==
+ pt := copy(#1)
+ u := elt(#1,1); v := elt(#1,2); phi := elt(#1,3)
+ pt.1 := a*sinh(v)*cos(phi)/(cosh(v)-cos(u))
+ pt.2 := a*sinh(v)*sin(phi)/(cosh(v)-cos(u))
+ pt.3 := a*sin(u)/(cosh(v)-cos(u))
+ pt
+
+ conical(a,b) ==
+ pt := copy(#1)
+ lambda := elt(#1,1); mu := elt(#1,2); nu := elt(#1,3)
+ pt.1 := lambda*mu*nu/(a*b)
+ pt.2 := lambda/a*sqrt((mu**2-a**2)*(nu**2-a**2)/(a**2-b**2))
+ pt.3 := lambda/b*sqrt((mu**2-b**2)*(nu**2-b**2)/(b**2-a**2))
+ pt
+
+@
+\section{License}
+<<license>>=
+--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+--All rights reserved.
+--
+--Redistribution and use in source and binary forms, with or without
+--modification, are permitted provided that the following conditions are
+--met:
+--
+-- - Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+--
+-- - Redistributions in binary form must reproduce the above copyright
+-- notice, this list of conditions and the following disclaimer in
+-- the documentation and/or other materials provided with the
+-- distribution.
+--
+-- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+-- names of its contributors may be used to endorse or promote products
+-- derived from this software without specific prior written permission.
+--
+--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+@
+<<*>>=
+<<license>>
+
+<<package COORDSYS CoordinateSystems>>
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}