在Matlab中以3D形式绘制围绕给定坐标的球体

时间:2018-01-12 11:17:53

标签: matlab plot 3d scatter3d

我正在研究一个物体的模型,该物体在一些粗糙的表面上滑动,该表面由具有小的随机位置变化的球体组成。在图形中我希望球体具有给定的半径,但是当使用scatter3时这不起作用,当我放大或缩小时,圆的大小会改变。我可以通过使用“矩形”函数在2D中轻松解决此问题,但对于3D,这不起作用。

在点周围绘制球体是否有更好的功能?

我已阅读此https://se.mathworks.com/matlabcentral/answers/101738-how-do-i-specify-the-size-of-the-markers-created-by-the-scatter-plot-in-units-proportional-to-the-da。但它要么不适用于scatter3,要么我做错了。 enter image description here

enter image description here

放大时尺寸会发生变化。

fig = figure(1);
hold on
daspect([1,1,1]);
surface.xnum = 16;
surface.znum = 16;
surface.r = 1;
circlenumber = 0;
for n = 1:surface.xnum 
    for m = 1:surface.znum
        circlenumber = circlenumber + 1;
        surface.circlecentre(circlenumber,:) = [n + 0.1*surface.r*randn , 0, m + 0.1*surface.r*randn ];
        plt.surface = scatter3(surface.circlecentre(circlenumber, 1),surface.circlecentre(circlenumber, 2),surface.circlecentre(circlenumber, 3), 850*surface.r,'filled','r','MarkerEdgeColor','k');
    end
end

代码的相关部分。将坐标设置为球体的中心并在其周围绘制球体。

1 个答案:

答案 0 :(得分:0)

这是我从Ander Biguri的暗示中找到的解决方案。我用冲浪来绘制球体而不是散射物。

fig = figure(1);
hold on
daspect([1,1,1]); 
colormap summer      
shading interp  % removes the lines in surfplot
surface.xnum = 8;
surface.znum = 8;
surface.r = 0.75;
circlenumber = 0;

for m = 1:surface.xnum     
    for n = 1:surface.znum

        circlenumber = circlenumber + 1;
        surface.circlecentre(circlenumber,:) = [m + 0.1*surface.r*randn ,0 , n + 0.1*surface.r*randn ];  
        [x,y,z] = sphere; surf(x*surface.r+m*2*surface.r+0.1*surface.r*randn, y*surface.r, z*surface.r+n*2*surface.r+0.1*surface.r*randn,'Edgecolor','none');

    end
end