我绘制了三个在特定高度相互相交的圆锥体。我需要找出路口的共同体积,但我无法弄清楚! MATLAB中有没有内置函数可以计算感兴趣的体积?我还想突出显示颜色更深的区域。有什么建议吗?
绘制的图片如下所示:
问候, 传统知识
最佳答案
我将用类似的三重交集来说明原理,用圆柱体代替两个圆锥体。 (此外,我不是在回答有关着色的问题。请每个问题一个问题。)
假设我想要圆锥 z=x^2+y^2、圆柱 x^2+(z-2)^2=1 和圆柱 y^2+(z-2)^2 = 1. 圆锥仅从下方限制实体。圆柱体可以从顶部和底部完成:求解它们的 z 方程给出两个值,顶部和底部。
点 (x,y) 上的实体的垂直尺寸可以找到为
max(0, min(all tops) - max(all bottoms))
具体来说:
vcone = @(x,y) sqrt(x.^2+y.^2); % cone, bottom only
c1top = @(x,y) 2+sqrt(max(0,1-x.^2)); % 1st cylinder, top part
c1bot = @(x,y) 2-sqrt(max(0,1-x.^2)); % 1st cylinder, bottom part
c2top = @(x,y) 2+sqrt(max(0,1-y.^2)); % 2nd cylinder, top part
c2bot = @(x,y) 2-sqrt(max(0,1-y.^2)); % 2nd cylinder, bottom part
height = @(x,y) max(0, min(c1top(x,y),c2top(x,y)) - max(vcone(x,y),max(c1bot(x,y),c2bot(x,y))));
integral2(height, -1, 1, -1, 1)
输出 5.3333。
请注意,sqrt(max(0,...))
用于防止 Matlab 在平方根的内容为负数的情况下获取复数。这很有用,因为积分的限制(上面的 -1,1,-1,1)通常对应于投影到 xy 平面的一些边界矩形,因此在这个矩形内,一些公式可能没有真正定义。例如,您可以使用
integral2(height, -2, 2, -2, 2)
为了得到相同的结果,尽管当 |x| 时圆柱体的方程式不成立了或 |y|超过 1。
关于matlab - 如何在 MATLAB 中找到三个相互交叉的圆锥体的共同体积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784547/