matlab - 如何在 MATLAB 中找到三个相互交叉的圆锥体的共同体积?

标签 matlab colors 3d intersection volume

我绘制了三个在特定高度相互相交的圆锥体。我需要找出路口的共同体积,但我无法弄清楚! MATLAB中有没有内置函数可以计算感兴趣的体积?我还想突出显示颜色更深的区域。有什么建议吗?

绘制的图片如下所示:

enter image description here

问候, 传统知识

最佳答案

我将用类似的三重交集来说明原理,用圆柱体代替两个圆锥体。 (此外,我不是在回答有关着色的问题。请每个问题一个问题。)

假设我想要圆锥 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/

相关文章:

jquery - 从输入 [type=color] 更新显示颜色

html - 在客户结帐时更改颜色并禁用温度的按钮

ios - 将嵌套的 SCNNode 位置转换为屏幕空间中的 CGPoint

ios - 谷歌地图 - 3D View 是否可能

matlab - 如何在 matlab 中更改中线的颜色?

algorithm - Matlab:以独特的方式对矩阵进行排序

arrays - 在 matlab 中,我应该使用什么来收集不同对象的集合?

arrays - 将元胞矩阵转换为单行向量?

image - 为什么opencv cvtColor会修改图像大小?

python - 加速 Dijkstra 的算法来解决 3D 迷宫