/
cart2sph2d.m
70 lines (63 loc) · 1.77 KB
/
cart2sph2d.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
function varargout = cart2sph2d(x, y, z)
%CART2SPH2D Convert cartesian coordinates to spherical coordinates in degrees.
%
% [THETA PHI RHO] = cart2sph2d([X Y Z])
% [THETA PHI RHO] = cart2sph2d(X, Y, Z)
%
% The following convention is used:
% THETA is the colatitude, in degrees, 0 for north pole, 180 degrees for
% south pole, 90 degrees for points with z=0.
% PHI is the azimuth, in degrees, defined as matlab cart2sph: angle from
% Ox axis, counted counter-clockwise.
% RHO is the distance of the point to the origin.
% Discussion on choice for convention can be found at:
% http://www.physics.oregonstate.edu/bridge/papers/spherical.pdf
%
% Example:
% cart2sph2d([1 0 0])
% ans =
% 90 0 1
%
% cart2sph2d([1 1 0])
% ans =
% 90 45 1.4142
%
% cart2sph2d([0 0 1])
% ans =
% 0 0 1
%
% % check consistency with sph2cart2d
% sph2cart2d(cart2sph2d(30, 40, 5))
% ans =
% 30.0000 40.0000 5.0000
%
% See also:
% angles3d, sph2cart2d, cart2sph, cart2sph2
%
% ------
% Author: David Legland
% e-mail: david.legland@inrae.fr
% Created: 2011-06-29, using Matlab 7.9.0.529 (R2009b)
% Copyright 2011 INRA - Cepia Software Platform.
% if data are grouped, extract each coordinate
if nargin == 1
y = x(:, 2);
z = x(:, 3);
x = x(:, 1);
end
% cartesian to spherical conversion
hxy = hypot(x, y);
rho = hypot(hxy, z);
theta = 90 - atan2(z, hxy) * 180 / pi;
phi = atan2(y, x) * 180 / pi;
% format output
if nargout <= 1
varargout{1} = [theta phi rho];
elseif nargout == 2
varargout{1} = theta;
varargout{2} = phi;
else
varargout{1} = theta;
varargout{2} = phi;
varargout{3} = rho;
end