这都是在3d空间。
我有一个由点云定义的形状。我还创建了一个MATLAB可以显示的表面结构(面和顶点)。
我现在正试图通过形状绘制平面(见下图)。该平面被定义为垂直于顶部线上的点i和i + 1之间的中点。我的主要目标是找到每个平面上/附近的所有点(比如距离< x)。
但首先我想要想象所有这些平面以检查形状内的重叠但是我不确定如何将平面限制在形状内(或至少接近)。我猜我必须在meshgrid中定义它,但我无法在线找到任何线索。
有什么想法吗?
答案 0 :(得分:0)
一个基本想法是简单地扔掉你正在绘制的平面的那些点,这些点不在你的数据点的凸包内。您可以将绘图中这些点的值设置为NaN
,因为这会阻止它们显示。
我找不到内置函数来检查一个点是否在凸包内。所以你的选择是:
isInsideHull
inhull
scatteredInterpolant
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));
因此,不是整个飞机,而是在凸面上得到小平面。
您还可以尝试以下方法之一: