如何从MATLAB中的点生成球体?

时间:2017-05-03 08:21:17

标签: matlab

我在MATLAB中生成了随机3D点。每次运行时点数组的长度都会发生变化。我想把这些点变成球体。但是,我还没有成功。我的观点的散点图是这样的:

My plot

每个点用x,y和z表示。现在,我想用x,y和z作为中心点并生成半径为r的球体?我怎么能这样做?

为了给你一个想法,一个示例图片来展示我期望产生的东西:

enter image description here

2 个答案:

答案 0 :(得分:8)

你可以使用内置cellfun,乘以半径并添加中心坐标。要一次性绘制它们,你可以使用% number of spheres n = 10; % random xyz center points xyz = rand(n,3)*10; % random radius r = rand(n,1); % generate unit sphere (radius=1, center=[0,0,0]) [X,Y,Z] = sphere; % plot function for all spheres plotfun = @(c,r) surf(X*r + c(1),Y*r + c(2),Z*r + c(3)); % generate figure with "hold on" figure; hold on; axis equal; grid on; % plot all spheres h = cellfun(plotfun,num2cell(xyz,2),num2cell(r),'UniformOutput',0);

surf

enter image description here

如果您希望球体类似于您想要的输出,您可以向light添加一些图形属性并添加plotfun = @(c,r) surf(x*r + c(1),y*r + c(2),z*r + c(3),... 'FaceColor',.7*[1 1 1],'EdgeColor','none',... 'FaceLighting','gouraud','AmbientStrength',0.5); light('Position',[-1 0 0]); 对象:

offres

enter image description here

答案 1 :(得分:2)

假设你有一个点(a1,a2,a3)并且你想绘制一个半径为R的球体,你可以这样做:

R=5;
a1=1;
a2=-2;
a3=3;
[x,y,z] = sphere;
surf((x+a1)*R,(y+a2)*R,(z+a3)*R) % centered at (a1,a2,a3) with radius R

我建议循环遍历你的数组并在每个点上执行此操作。请注意,您可以增加球体上的面数,看看here,看看如何。