1## Copyright (C) 2021 David Legland 2## All rights reserved. 3## 4## Redistribution and use in source and binary forms, with or without 5## modification, are permitted provided that the following conditions are met: 6## 7## 1 Redistributions of source code must retain the above copyright notice, 8## this list of conditions and the following disclaimer. 9## 2 Redistributions in binary form must reproduce the above copyright 10## notice, this list of conditions and the following disclaimer in the 11## documentation and/or other materials provided with the distribution. 12## 13## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' 14## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16## ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 17## ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 19## SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 20## CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 21## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23## 24## The views and conclusions contained in the software and documentation are 25## those of the authors and should not be interpreted as representing official 26## policies, either expressed or implied, of the copyright holders. 27 28function varargout = sph2cart2(theta, phi, rho) 29%SPH2CART2 Convert spherical coordinates to cartesian coordinates. 30% 31% C = SPH2CART2(S) 32% C = SPH2CART2(THETA, PHI) (assume rho = 1) 33% C = SPH2CART2(THETA, PHI, RHO) 34% [X, Y, Z] = SPH2CART2(THETA, PHI, RHO); 35% 36% S = [phi theta rho] (spherical coordinate). 37% C = [X Y Z] (cartesian coordinate) 38% 39% The following convention is used: 40% THETA is the colatitude, in radians, 0 for north pole, +pi for south 41% pole, pi/2 for points with z=0. 42% PHI is the azimuth, in radians, defined as matlab cart2sph: angle from 43% Ox axis, counted counter-clockwise. 44% RHO is the distance of the point to the origin. 45% Discussion on choice for convention can be found at: 46% http://www.physics.oregonstate.edu/bridge/papers/spherical.pdf 47% 48% See also: 49% angles3d, cart2sph2, sph2cart, sph2cart2d 50% 51% --------- 52% author : David Legland 53% INRA - TPV URPOI - BIA IMASTE 54% created the 18/02/2005. 55% 56 57% HISTORY 58% 22/03/2005: make test for 2 args, and add radius if not specified for 59% 1 arg. 60% 03/11/2006: change convention for angle: uses order [THETA PHI RHO] 61 62% Process input arguments 63if nargin == 1 64 phi = theta(:, 2); 65 if size(theta, 2) > 2 66 rho = theta(:, 3); 67 else 68 rho = ones(size(phi)); 69 end 70 theta = theta(:, 1); 71 72elseif nargin == 2 73 rho = ones(size(theta)); 74 75end 76 77% conversion 78rz = rho .* sin(theta); 79x = rz .* cos(phi); 80y = rz .* sin(phi); 81z = rho .* cos(theta); 82 83if nargout <= 1 84 varargout{1} = [x, y, z]; 85else 86 varargout{1} = x; 87 varargout{2} = y; 88 varargout{3} = z; 89end 90 91