2010-08-30 72 views

回答

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 
+0

你如何刪除點 – dewalla 2010-08-30 18:48:42

+0

@dewalla:我更新了我的答案,以顯示如何索引到x,y,和z來獲得你想要的點數。 – gnovice 2010-08-30 18:59:05

+0

有沒有辦法讓它成爲圓頂而不是球體? (也就是xy和z分量不全都一樣嗎? – dewalla 2010-09-01 13:02:10

2

看看surf。爲球體的公式是

x^2+y^2+z^2 = R^2 

可能還需要meshgrid

+1

對'surf'的幫助甚至有一個繪製球體的例子。 – 2010-08-30 18:44:03

+0

鏈接到衝浪的幫助:http://www.mathworks.de/help/techdoc/ref/surf.html – 2012-01-13 10:26:30

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); 
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); 
    } 
    }