给定曲面,找到由曲面切成两半的零件

时间:2009-11-18 08:08:54

标签: matlab

假设我有一个Surface(S1),我有另一个表面(S2)可以穿过它。如何找到由两者交叉形成的多面体,如图所示?

在上面的示例中,应该返回两个多面体,一个在S2之上,另一个在S1之后。

但S1和S2由3D坐标定义。假设S1的坐标为(P1,P2, P3, P4),S2为P5,P6, P7, P8,相交的点为P9P10。我想要一个程序,它返回两个多面体:

P1,P2,P9,P10,P5,P6

P3,P4,P10,P9,P7,P8

我知道可以获得两个曲面的交点并形成多面体,但是如果我有一个内置的matlab函数,这将是很好的

2 个答案:

答案 0 :(得分:1)

找到两个表面的交点(假设它们是平面,这是平行度测试,交叉乘积,并求解线性方程以检查它们实际相交的位置)。然后,您拥有构建两个多面体所需的所有点。你可能想要检查你是否正确结束了'正确'的结束并且法线是有意义的,但是在上面的情况下,每个多面体有6个点,其中2个点在平面交叉点是常见的。

答案 1 :(得分:0)

我不完全确定你打算如何定义你的多面体。您是希望它由体积,顶点,边,面定义还是仅仅通过了解空间中的给定点(x,y,z)是否属于哪个多面体?

如果您想要最后一个选项,那么启动执行此操作的功能应该不会太难。

鉴于你的X和Y坐标对于S1S2都是通用的,一个简单的if语句就足以区分这两个多面体。

考虑以下示例:

[x,y] = meshgrid(-10:0.1:10,-10:0.1:10); % Creates x & y meshgrids for [-10,10]
S1 =  4.*x + 3.*y;
S2 = 12.*x + 6.*y - 12;

现在我们有S1S2,我们可以创建一个区分两者的逻辑矩阵:

logical = S1 < S2;

此后,我不知道你想怎么做。