【问题标题】:Given a Surface, Find the Parts that are Cut Into Half By a Surface给定一个曲面,找出被一个曲面切成两半的部分
【发布时间】:2015-03-24 12:25:17
【问题描述】:

假设我有一个表面 (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函数会很好

【问题讨论】:

  • 曲面是如何定义的?象征性地还是作为 x、y 和 z 的矩阵?
  • 曲面是否共享共同的 x 和 y 坐标?
  • @Zaid:是的,它们确实共享共同的 X 和 Y 坐标
  • 老问题,能不能重新上传一下图片?

标签: matlab


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我不完全确定您打算如何定义多面体。您希望它由体积、顶点、边、面来定义,还是仅仅通过知道空间中的给定点 (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;
    

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

    【讨论】:

    • 我希望它由顶点定义。
    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2012-05-31
    • 2019-06-07
    • 2023-02-15
    • 2021-01-17
    相关资源
    最近更新 更多