trying to model points inside a sphere
23 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
jonas
2018 年 5 月 4 日
Great! I will post an answer for future reference, if anyone else wants to model a sphere with random points
回答 (1 件)
jonas
2018 年 5 月 4 日
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 件のコメント
David Goodmanson
2018 年 5 月 5 日
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;
参考
カテゴリ
Help Center および File Exchange で Surface and Mesh Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!