假设我有一个Surface(S1
),我有另一个表面(S2
)可以穿过它。如何找到由两者交叉形成的多面体,如图所示?
在上面的示例中,应该返回两个多面体,一个在S2
之上,另一个在S1
之后。
但S1和S2由3D坐标定义。假设S1的坐标为(P1,P2, P3, P4
),S2为P5,P6, P7, P8
,相交的点为P9
和P10
。我想要一个程序,它返回两个多面体:
P1,P2,P9,P10,P5,P6
和
P3,P4,P10,P9,P7,P8
我知道可以获得两个曲面的交点并形成多面体,但是如果我有一个内置的matlab函数,这将是很好的
答案 0 :(得分:1)
找到两个表面的交点(假设它们是平面,这是平行度测试,交叉乘积,并求解线性方程以检查它们实际相交的位置)。然后,您拥有构建两个多面体所需的所有点。你可能想要检查你是否正确结束了'正确'的结束并且法线是有意义的,但是在上面的情况下,每个多面体有6个点,其中2个点在平面交叉点是常见的。
答案 1 :(得分:0)
我不完全确定你打算如何定义你的多面体。您是希望它由体积,顶点,边,面定义还是仅仅通过了解空间中的给定点(x,y,z)是否属于哪个多面体?
如果您想要最后一个选项,那么启动执行此操作的功能应该不会太难。
鉴于你的X和Y坐标对于S1
和S2
都是通用的,一个简单的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;
现在我们有S1
和S2
,我们可以创建一个区分两者的逻辑矩阵:
logical = S1 < S2;
此后,我不知道你想怎么做。