這是一個使用填充多邊形(patch
對象)的解決方案。我們的想法是,除了表面之外,我們還創建了5個多邊形來形成「4個牆壁和一個地板」,而表面本身就像一個「天花板」。
結果:
我想說它給卷的印象非常好。
function q47361071
%% Definitions:
% Define a surface equation: z = f(x,y)
funCube = @(x,y)2.6207.*(sin(x)+cos(x)).*cos(y);
% Evaluate the surface equation at a grid of points:
X = 0:0.01:0.26; Y = X;
[YY,XX] = meshgrid(X,Y);
ZZ = funCube(XX,YY);
%% Visualization:
figure(); surf(XX,YY,ZZ); hAx = gca; hold(hAx,'on'); view([-50 35]);
draw5Poly(hAx,XX,YY,ZZ);
end
function draw5Poly(hAx,XX,YY,ZZ)
P = {[XX(1,1), YY(1,1), 0; [XX(:,1) YY(:,1) ZZ(:,1) ]; XX(end,1),YY(end,1), 0],...
[XX(1,end), YY(1,end),0; [XX(:,end) YY(:,end) ZZ(:,end) ]; XX(end,1),YY(end,end), 0],...
[XX(1,1), YY(1,1), 0; [XX(1,:).' YY(1,:).' ZZ(1,:).' ]; XX(1,end),YY(1,end), 0],...
[XX(end,1), YY(end,1),0; [XX(end,:).' YY(end,:).' ZZ(end,:).']; XX(end,end),YY(end,end),0],...
[XX(1,1),YY(1,1),0; XX(1,end),YY(1,end),0; XX(end,end),YY(end,end),0; XX(end,1),YY(end,1),0]};
for indP = 1:numel(P)
patch(hAx, P{indP}(:,1),P{indP}(:,2),P{indP}(:,3),'k', 'FaceColor', 'y', 'FaceAlpha', 0.7);
end
end
正如你可能會注意到,輔助功能draw5Poly
是專爲這樣一個場景,你只需要想象每軸一個這樣的體積。如果你用兩個表面/體積來做這件事,如果所有的「牆壁」都是黃色的,可能很難理解 - 因此,你可能想爲該功能輸入FaceColor
(這樣你可以用不同的顏色繪製不同的體積)。
不確定這是不是你的意思,但有一種方法是,如果你有一個網格,並且你用'1'標記網格上的所有點'在'裏面''和'0'在外面,你然後可以創建一個等值面(默認的0.5值),這將給你一個3D補丁對象。 –