%% Random Numbers Within a Sphere
%% Section 1
% One way to create points inside a sphere is to specify them in spherical coordinates. Then you can convert them to Cartesian coordinates to plot them.
% First, initialize the random number generator to make the results in this example repeatable.

rng(0,'twister')

%
% Calculate an elevation angle for each point in the sphere. These values are in the open interval, (-\pi/2,\pi/2), but are not uniformly distributed.

rvals = 2*rand(1000,1)-1;
elevation = asin(rvals);

%
% Create an azimuth angle for each point in the sphere. These values are uniformly distributed in the open interval, (0,2\pi).

azimuth = 2*pi*rand(1000,1);

%
% Create a radius value for each point in the sphere. These values are in the open interval, (0,3), but are not uniformly distributed.

radii = 3*(rand(1000,1).^(1/3));

%
% Convert to Cartesian coordinates and plot the result.

[x,y,z] = sph2cart(azimuth,elevation,radii);
figure
plot3(x,y,z,'.')
axis equal

%
% If you want to place random numbers on the surface of the sphere, then specify a constant radius value to be the last input argument to sph2cart. In this case, the value is 3.

[x,y,z] = sph2cart(azimuth,elevation,3);

% Copyright 2015 The MathWorks, Inc.