我正在使用geom3d来建模3D几何形状。具体来说,我有兴趣用任意平面切片后计算椭圆体的体积。我使用以下代码(为简单起见,我将使用一个球体并将其切割在中心)。
<% if task.user_id == current_user.id %>
<-- stuff you want to show the assigned user -->
<% else %>
<-- stuff you want to show everyone else -->
<% end %>
按预期计算球体的体积(4/3 * pi)。
现在,我把它切成两半。
[x, y, z] = sphere(30);
[f, v, c] = surf2patch(x, y, z, z, 'triangles');
meshVolume(v, f)
现在,如果我计算音量,我会得到不正确的值(明显小于初始音量的一半)。
P = createPlane([0, 0, 0], [0, 0, 1]);
[v1 f1] = clipConvexPolyhedronHP(v, f, P);
drawMesh(v1, f1, 'facealpha', 0.5)
错误结果的原因是什么?
答案 0 :(得分:2)
(我已经在Mathworks File Exchange页面上回答了,但我认为将它放在这里也很有用)
使用没有&#39; abs&#39;的决定因素是计算网格体积的正确方法。通过这种方式,您可以处理非凸网格,甚至是带孔的多面体。但是网格的面必须一致(通常在网格外部)。 类似的主题是given here
使用行列式的绝对值将仅为凸多面体提供正确的结果。因此,我只会将其用作特定应用程序的快速入侵。
关于原始问题,在剪裁网格的计算中存在错误,导致面朝向不一致,因此导致错误的结果。我已经更新了它,所以它应该会有更好的结果。
(注意:我是geom3d软件包的作者)
答案 1 :(得分:0)