trying to model points inside a sphere

11 views (last 30 days)
Devon Romine
Devon Romine on 3 May 2018
if true
clear
clear all
r=randn(0,1);
theta=randn(0,1)*(pi);
phi=randn(0,1)*(2*pi);
for N=1:20
hold on
x=r(N).*sin(theta(N)).*cos(phi(N));
y=r(N).*sin(theta(N)).*sin(phi(N));
z=r(N).*cos(theta(N));
end
hold off
drawnow
% code
end
I am trying to model a bunch of points inside a sphere, I put the spherical cooridinates into cartesian, but cannot get it to plot, any help would be appreciated.
  5 Comments
Devon Romine
Devon Romine on 4 May 2018
I did not know about the view(3), that was what I needed thank you!
jonas
jonas on 4 May 2018
Great! I will post an answer for future reference, if anyone else wants to model a sphere with random points

Sign in to comment.

Answers (1)

jonas
jonas on 4 May 2018
This will generate a sphere with random points inside of it (code adapted from the original question):
if true
clear
clear all
n=20;
r=rand(n,1);
theta=rand(n,1)*pi;
phi=rand(n,1)*(2*pi);
x=r.*sin(theta).*cos(phi);
y=r.*sin(theta).*sin(phi);
z=r.*cos(theta);
sphere;
hold on
scatter3(x,y,z)
hold off
% code
end
ha=get(gca,'children')
set(ha(2),'FaceColor',[0 0 0],'FaceAlpha',0.1,'EdgeAlpha',0.2)
  1 Comment
David Goodmanson
David Goodmanson on 5 May 2018
Hi Jonas / Devin,
This code is pretty good, except if you try it for something like n = 2000 you will see a cluster of points in the middle of the sphere and also along the z axis. It's more usual to be looking for a uniform density of points in the sphere, which would be
r = rand(n,1).^(1/3);
costheta = 2*rand(n,1)-1;
sintheta = sqrt(1-costheta.^2);
phi=rand(n,1)*(2*pi);
x=r.*sintheta.*cos(phi);
y=r.*sintheta.*sin(phi);
z=r.*costheta;

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!