trying to model points inside a sphere
Show older comments
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
jonas
on 3 May 2018
The code stops because theta, phi and r are all empty, because randn(0,1) does not output anything. You are also overwriting the variables x,y and z each iteration (consider removing the loop). If you fix those issues, maybe the question becomes more clear.
Devon Romine
on 4 May 2018
No problem! I am a bit confused, because running your code gives me what you requested: a sphere with random points inside of it. Just type view(3) to get a 3d-perspective. If you want tips to improve the visualization, then you need to be a bit more specific in what you are trying to achieve. Try this for example:
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)
Devon Romine
on 4 May 2018
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
Answers (1)
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
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;
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!