首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表面下的可视化体积

表面下的可视化体积
EN

Stack Overflow用户
提问于 2017-11-18 00:06:21
回答 1查看 130关注 0票数 1

我想在一个2变量函数生成的曲面下可视化三维体积。到目前为止,我可以生成表面,但我不知道如何实际可视化体积。

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-19 15:37:56

这是一个使用填充多边形(patch对象)的解决方案。这个想法是,除了表面,我们创造了5个多边形形成"4墙和地板“,而表面本身作为一个”天花板“。

结果:

我认为它给人的印象很好。

代码语言:javascript
复制
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

正如您可能注意到的,helper函数draw5Poly是为这样的场景设计的,您只需要可视化每个轴上的一个。如果您使用两个表面/卷来完成此操作,那么如果所有的“墙壁”都是黄色的,则可能很难理解--出于这个原因,您可能希望将FaceColor作为函数的输入(这样您就可以用不同的颜色绘制不同的卷)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47361071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档