【发布时间】:2014-10-03 15:09:42
【问题描述】:
我在 Matlab 中创建了 3D 凸包图。似乎在这个函数中,一些激光点用于凸包的刻面,但其他一些点位于凸包内部。我的问题是如何在 Matlab 中分别识别这些点。哪种方法适用于计算位于凸包内部的这些点到最近的凸包小平面的垂直距离(从每个点到凸包最近小平面的距离)? 如果您能给我介绍一些关于凸包函数的参考资料,我将不胜感激。
【问题讨论】:
我在 Matlab 中创建了 3D 凸包图。似乎在这个函数中,一些激光点用于凸包的刻面,但其他一些点位于凸包内部。我的问题是如何在 Matlab 中分别识别这些点。哪种方法适用于计算位于凸包内部的这些点到最近的凸包小平面的垂直距离(从每个点到凸包最近小平面的距离)? 如果您能给我介绍一些关于凸包函数的参考资料,我将不胜感激。
【问题讨论】:
在 Matlab 文件交换中,有一个很棒的函数叫做inhull,它会测试你的点是否在船体内部。我不确定它是否提供了从点到最近面的距离,但也许代码中使用的方法很容易更改以提供此输出。
【讨论】:
查看函数,tsearchn。
以下代码创建一个 3D 球体并计算 delaunay 三角化。然后我们用点设置testpoints 变量来测试它们是否在球体内。 t 将索引返回到 TRI 以表示最接近该点的四面体面;如果该点在球体之外,则返回 NaN。
[X,Y,Z] = sphere(N);
TRI = delaunay(X(:),Y(:),Z(:));
testpoints = [0 0 0; 0 .5 0; 1 2 0]
t = tsearchn([X(:) Y(:) Z(:)],TRI,testpoints)
figure;
trisurf(TRI,X(:),Y(:),Z(:));
输出是,
t =
8182
7779
NaN
【讨论】: