如何在MATLAB中找到三个相交圆锥的公共体积?

3
我已经绘制了三个锥体,在某一高度相交。我需要找出它们的交集部分的公共体积,但我无法解决这个问题!是否有MATLAB中的内置函数可以计算所需的体积?我还想用较强的颜色突出显示该区域。有什么建议吗?
下面是绘制的图片:

enter image description here

此致 TK

1
请提供一些代码,你需要提供一个起点以便获得更好的帮助。 - hoss
有趣的问题。您可能希望直接将图像嵌入到您的帖子中(http://meta.stackexchange.com/questions/75491/how-to-upload-an-image-to-a-post),并且还要标记您的帖子为“mathlab”。 - leymannx
我觉得可能没有,但也许这个起点结合这个SO post,可以帮助你开始。如果这行不通,你应该能够轻松地手算出来,因为你知道如何计算在三维空间中的圆锥体积和线的交点 :) - ABC
1个回答

0

我将用一个类似的三重交叉来说明原理,将两个圆锥替换为圆柱体。(此外,我不会回答关于着色的问题。每个问题只能提一个问题,请注意。)

假设我想要在圆锥z=x^2+y^2、圆柱体x^2+(z-2)^2=1和圆柱体y^2+(z-2)^2=1之间找到体积。圆锥只从下面限制了固体。圆柱体可以从上面和下面限制:解出它们的方程得到两个值,顶部和底部。

在点(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时圆柱方程会失效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接