我需要绘制一个圆顶或半个球体,并能够改变圆顶的尺寸。我认为MATLAB将是我的最佳选择。
有什么建议吗?
感谢
答案 0 :(得分:6)
SPHERE函数为球面生成x,y和z坐标。您只需要移除与球体底部对应的点以制作圆顶。例如:
[x,y,z] = sphere; %# Makes a 21-by-21 point sphere
x = x(11:end,:); %# Keep top 11 x points
y = y(11:end,:); %# Keep top 11 y points
z = z(11:end,:); %# Keep top 11 z points
r = 3; %# A radius value
surf(r.*x,r.*y,r.*z); %# Plot the surface
axis equal; %# Make the scaling on the x, y, and z axes equal
答案 1 :(得分:2)
看看surf
。球体的公式是
x^2+y^2+z^2 = R^2
您可能还需要meshgrid
答案 2 :(得分:2)
这是一个起点:
R = 7;
[X,Y] = meshgrid(-10:.1:10);
Z = sqrt(R.^2 - X.^2 - Y.^2);
Z(imag(Z) ~= 0) = 0;
mesh(X,Y,Z);
答案 3 :(得分:0)
我拍了一张圆形图,并将其改编成圆顶图。我无法测试它,但它应该可以工作,因为圆圈工作正常。
我用JavaScript制作了这个。
setVox
只是一个可以在3D平面上打印体素的函数。
var rad = 1; //radius
for (var z = -(rad); z < 0; z++) {
r = Math.round(Math.sqrt(Math.pow(rad,2) - Math.pow(z,2)));
for (var x = -(r); x < r; x++) {
y = Math.round(Math.sqrt(Math.pow(r,2) - Math.pow(x,2)));
setVox(x,y,z);
setVox(x,-(y),z);
}
for (y = -(r); y < r; y++) {
x = Math.round(Math.sqrt(Math.pow(r,2) - Math.pow(y,2)));
setVox(x,y,z);
setVox(-(x),y,z);
}
}