Mercurial > hg > octave-lyh
annotate scripts/general/sph2cart.m @ 16772:7eff3032d144
Fix seealso HTML links when using Texinfo 4.X (bug #38862).
Use the prefix 'docX' instead of 'doc-' for Texinfo references.
* doc/interpreter/arith.txi, doc/interpreter/basics.txi,
doc/interpreter/container.txi, doc/interpreter/func.txi,
doc/interpreter/java.txi, doc/interpreter/matrix.txi,
doc/interpreter/munge-texi.pl, doc/interpreter/package.txi,
doc/interpreter/plot.txi, doc/interpreter/stats.txi,
doc/interpreter/strings.txi, doc/interpreter/system.txi,
doc/interpreter/var.txi, doc/interpreter/vectorize.txi,
libinterp/corefcn/qz.cc, libinterp/corefcn/regexp.cc,
libinterp/interpfcn/error.cc, scripts/general/accumarray.m,
scripts/general/structfun.m, scripts/miscellaneous/setfield.m,
scripts/optimization/fminbnd.m, scripts/optimization/fzero.m,
scripts/optimization/lsqnonneg.m:
Use the prefix 'docX' instead of 'doc-' for Texinfo references.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 18 Jun 2013 20:35:12 -0700 |
parents | f3d52523cde1 |
children |
rev | line source |
---|---|
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
11587
diff
changeset
|
1 ## Copyright (C) 2000-2012 Kai Habel |
3803 | 2 ## |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7016 | 7 ## the Free Software Foundation; either version 3 of the License, or (at |
8 ## your option) any later version. | |
3803 | 9 ## |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
3803 | 18 |
19 ## -*- texinfo -*- | |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
20 ## @deftypefn {Function File} {[@var{x}, @var{y}, @var{z}] =} sph2cart (@var{theta}, @var{phi}, @var{r}) |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
21 ## @deftypefnx {Function File} {[@var{x}, @var{y}, @var{z}] =} sph2cart (@var{S}) |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
22 ## @deftypefnx {Function File} {C =} sph2cart (@dots{}) |
9168
742cf6388a8f
Update section 17.7 (Coordinate Transformations) of arith.txi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
23 ## Transform spherical to Cartesian coordinates. |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
24 ## |
9168
742cf6388a8f
Update section 17.7 (Coordinate Transformations) of arith.txi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
25 ## @var{theta} describes the angle relative to the positive x-axis. |
3803 | 26 ## @var{phi} is the angle relative to the xy-plane. |
10687
a8ce6bdecce5
Improve documentation strings.
Rik <octave@nomad.inbox5.com>
parents:
9168
diff
changeset
|
27 ## @var{r} is the distance to the origin @w{(0, 0, 0)}. |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
28 ## @var{theta}, @var{phi}, and @var{r} must be the same shape, or scalar. |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
29 ## If called with a single matrix argument then each row of @var{s} |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
30 ## represents the spherical coordinate (@var{theta}, @var{phi}, @var{r}). |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
31 ## |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
32 ## If only a single return argument is requested then return a matrix |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
33 ## @var{C} where each row represents one Cartesian coordinate |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
34 ## (@var{x}, @var{y}, @var{z}). |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
35 ## @seealso{cart2sph, pol2cart, cart2pol} |
3803 | 36 ## @end deftypefn |
37 | |
38 ## Author: Kai Habel <kai.habel@gmx.de> | |
39 ## Adapted-by: jwe | |
40 | |
8533
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
41 function [x, y, z] = sph2cart (theta, phi, r) |
3803 | 42 |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
43 if (nargin != 1 && nargin != 3) |
6046 | 44 print_usage (); |
3803 | 45 endif |
46 | |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
47 if (nargin == 1) |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
48 if (ismatrix (theta) && columns (theta) == 3) |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
49 r = theta(:,3); |
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
50 phi = theta(:,2); |
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
51 theta = theta(:,1); |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
52 else |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
53 error ("sph2cart: matrix input must have 3 columns [THETA, PHI, R]"); |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
54 endif |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
55 elseif (nargin == 3) |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
56 if (! ((ismatrix (theta) && ismatrix (phi) && ismatrix (r)) |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
57 && (size_equal (theta, phi) || isscalar (theta) || isscalar (phi)) |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
58 && (size_equal (theta, r) || isscalar (theta) || isscalar (r)) |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
59 && (size_equal (phi, r) || isscalar (phi) || isscalar (r)))) |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
60 error ("sph2cart: THETA, PHI, and R must be matrices of the same size, or scalar"); |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
61 endif |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
62 endif |
8533
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
63 |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
64 x = r .* cos (phi) .* cos (theta); |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
65 y = r .* cos (phi) .* sin (theta); |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
66 z = r .* sin (phi); |
8533
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
67 |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
68 if (nargout <= 1) |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
69 x = [x, y, z]; |
3803 | 70 endif |
71 | |
8533
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
72 endfunction |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
73 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
74 |
8533
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
75 %!test |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
76 %! t = [0, 0, 0]; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
77 %! p = [0, 0, 0]; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
78 %! r = [0, 1, 2]; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
79 %! [x, y, z] = sph2cart (t, p, r); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
80 %! assert (x, r); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
81 %! assert (y, [0, 0, 0]); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
82 %! assert (z, [0, 0, 0]); |
3803 | 83 |
8533
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
84 %!test |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
85 %! t = 0; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
86 %! p = [0, 0, 0]; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
87 %! r = [0, 1, 2]; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
88 %! [x, y, z] = sph2cart (t, p, r); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
89 %! assert (x, r); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
90 %! assert (y, [0, 0, 0]); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
91 %! assert (z, [0, 0, 0]); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
92 |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
93 %!test |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
94 %! t = [0, 0, 0]; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
95 %! p = 0; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
96 %! r = [0, 1, 2]; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
97 %! [x, y, z] = sph2cart (t, p, r); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
98 %! assert (x, r); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
99 %! assert (y, [0, 0, 0]); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
100 %! assert (z, [0, 0, 0]); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
101 |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
102 %!test |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
103 %! t = [0, 0.5, 1]*pi; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
104 %! p = [0, 0, 0]; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
105 %! r = 1; |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
106 %! [x, y, z] = sph2cart (t, p, r); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
107 %! assert (x, [1, 0, -1], eps); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
108 %! assert (y, [0, 1, 0], eps); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
109 %! assert (z, [0, 0, 0], eps); |
fb1b87ea4af9
Permit scalars when transforming coordinates.
Ben Abbott <bpabbott@mac.com>
parents:
7017
diff
changeset
|
110 |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
111 %!test |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
112 %! S = [ 0, 0, 1; 0.5*pi, 0, 1; pi, 0, 1]; |
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
113 %! C = [ 1, 0, 0; 0, 1, 0; -1, 0, 0]; |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
114 %! assert (sph2cart (S), C, eps); |
10688
7357e37f34fa
coordinate transforms: add option to operate on column matrix of coordinates.
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
115 |