当 3d 平面位于结构外时切断它 (MATLAB)
Cut off 3d plane when it is outside a structure (MATLAB)
这一切都是 3d space。
我有一个由点云定义的形状。我还创建了一个 MATLAB 可以显示的表面结构(面和顶点)。
我现在正在尝试通过形状绘制平面(见下图)。该平面定义为垂直于顶线上点 i 和 i+1 之间的中点。我的总体目标是找到每个平面的所有点 on/near(比如距离 < x)。
但首先我想可视化所有这些平面以检查形状内的重叠,但我不确定如何将平面限制在(或至少接近)形状内。我猜我必须在 meshgrid 中定义它,但我在网上找不到任何线索。
有什么想法吗?
一个基本的想法是简单地丢弃你正在绘制的平面上那些不在你的数据点的凸包内的点。您可以将绘图中这些点的值设置为 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));
因此,您只会得到凸包内的小平面,而不是整个平面。
其他方法:
您也可以尝试以下方法之一:
- geom3d 来自文件交换
这一切都是 3d space。
我有一个由点云定义的形状。我还创建了一个 MATLAB 可以显示的表面结构(面和顶点)。
我现在正在尝试通过形状绘制平面(见下图)。该平面定义为垂直于顶线上点 i 和 i+1 之间的中点。我的总体目标是找到每个平面的所有点 on/near(比如距离 < x)。
但首先我想可视化所有这些平面以检查形状内的重叠,但我不确定如何将平面限制在(或至少接近)形状内。我猜我必须在 meshgrid 中定义它,但我在网上找不到任何线索。
有什么想法吗?
一个基本的想法是简单地丢弃你正在绘制的平面上那些不在你的数据点的凸包内的点。您可以将绘图中这些点的值设置为 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));
因此,您只会得到凸包内的小平面,而不是整个平面。
其他方法:
您也可以尝试以下方法之一:
- geom3d 来自文件交换