我在MATLAB中生成了随机3D点。每次运行时点数组的长度都会发生变化。我想把这些点变成球体。但是,我还没有成功。我的观点的散点图是这样的:
每个点用x,y和z表示。现在,我想用x,y和z作为中心点并生成半径为r的球体?我怎么能这样做?
为了给你一个想法,一个示例图片来展示我期望产生的东西:
答案 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
如果您希望球体类似于您想要的输出,您可以向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
答案 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,看看如何。