我正在研究一个物体的模型,该物体在一些粗糙的表面上滑动,该表面由具有小的随机位置变化的球体组成。在图形中我希望球体具有给定的半径,但是当使用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,要么我做错了。
放大时尺寸会发生变化。
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
代码的相关部分。将坐标设置为球体的中心并在其周围绘制球体。
答案 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