我想在2变量函数生成的曲面下可视化3D体积。到目前为止,我可以生成表面,但我不知道如何实际可视化音量。
funCube = @(x,y)2.6207.*(sin(x)+cos(x)).*cos(y);
funCylinder = @(x, y) 3.078677852.*cos(y);
cubePlot = ezsurf(funCube, [0, 0.26, 0, 0.26], 120);
hold on;
cylinderPlot = ezsurf(funCylinder, [0, 0.26, 0, 0.26], 120);
答案 0 :(得分:1)
这是使用填充多边形(patch
个对象)的解决方案。我们的想法是,除了表面之外,我们还创建了5个多边形,以形成“墙”和“地板”。而表面本身就是一个天花板"。
结果:
我说它给人的印象非常好。
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
成为函数的输入(这样你就可以用不同的颜色绘制不同的卷)。