这是一个使用填充多边形(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补丁对象。 –