【问题标题】:Cut off 3d plane when it is outside a structure (MATLAB)当它在结构之外时切断3d平面(MATLAB)
【发布时间】:2015-01-05 13:56:20
【问题描述】:

这一切都在 3d 空间中。

我有一个由点云定义的形状。我还创建了一个 MATLAB 可以显示的表面结构(面和顶点)。

我现在正在尝试通过形状绘制平面(见下图)。该平面被定义为垂直于顶线上的点 i 和 i+1 之间的中点。我的大目标是找到每个平面上/附近的所有点(比如距离

但首先我想可视化所有这些平面以检查形状内的重叠,但我不确定如何将平面限制在(或至少接近)形状内。我猜我必须在meshgrid中定义它,但我在网上找不到任何线索。

有什么想法吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    一个基本想法是简单地丢弃您正在绘制的平面上那些不在数据点凸包内的点。您可以将绘图中这些点的值设置为NaN,因为这会阻止它们显示。

    我找不到一个内置函数来检查一个点是否在凸包内。所以你的选择是:

    如何滥用scatteredInterpolant

    %% Your points and plane
    % Random points
    P = rand(400, 3);
    % Random Plane
    [X,Y] = ndgrid(linspace(-0.25, 1.25, 100));
    Z = 3*X + 0.3*Y - 2;
    
    %% Compute functions that are the x/y/z-identity inside the hull and `NaN` outside.
    hull = unique(convhull(P)); % To make the call of scatteredInterpolant more efficient
    insideHull = @(dim) scatteredInterpolant(P(hull,1), P(hull,2), P(hull,3), ...
                                             P(hull,dim), 'linear', 'none');
    [insideHx, insideHy, insideHz] = deal(insideHull(1), insideHull(2), insideHull(3));
    
    %% Plot the data points P
    plot3(P(:,1), P(:,2), P(:,3), 'x');
    hold on;
    
    %% Plot the points of the plane, that are inside the convex hull of P
    surf(insideHx(X,Y,Z), insideHy(X,Y,Z), insideHz(X,Y,Z));
    

    因此,您将获得凸包内的刻面,而不是整个平面。

    其他方法:

    您也可以尝试以下方法之一:

    【讨论】:

    • 谢谢 - 这是一个非常有用的起点。但我的问题是形状会自行循环(想象一个 C 形状)。所以我相信如果飞机穿过两边,这种方法会在“C”的“顶部”和“底部”收集点。这就是为什么我试图使用形状边界来切割平面。这有意义吗?
    • 使用边界会更好,因为我们可以有更干净的切割,但它仍然会产生顶部和底部,因此会遇到同样的问题!
    • 平面由贯穿整个形状的线条定义。所以有定义 C 顶部的线和定义 C 底部的线。所以如果我们可以在平面离开形状时切割它们,我们将在顶部和底部有不同的平面,以便可以找到最近的点每个。对吗?
    • 是的。但是这种解决方法不会比我的方法的相应解决方法更容易编程。我们可以在我提出的算法中使用 blob-detection 并选择最接近边界上所需点的 blob。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多