在多面体-点在一个三角形的体积?

版本3.3.0.0 (22.4 KB) 斯文
测试3d点是否在网格内。或者,从一个表面体素化一个蒙版。网格也可以是非凸的!

6.2 k下载

更新2015年11月12日

查看许可协议

编者按:此文件被选为MATLAB Central本周精选

in多面体测试点是否在三维三角(面/顶点)曲面内
用户注意:
在多面体中采用了广泛使用的曲面法线指向物体外的惯例。如果你的面指向内,简单地调用inpolyhedron(…,'flipNormals',true)。
(请参阅http://blogs.mathworks.com/pick/2013/09/06/inpolyhedron/
INPOLYHEDRON(FV,QPTS)测试查询点(QPTS)是否在
由FV定义的patch/surface/polyhedron(一个具有字段' vertex '和
“脸”)。QPTS是一个n × 3的XYZ坐标集合。IN是一个n乘1的逻辑
向量,对于曲面内的每个查询点都将为TRUE。
INPOLYHEDRON(FACES,VERTICES,…)单独接受面/顶点,而不是在
FV结构。

In = inpolyhedron(…,X, Y, Z) voxelises a mask of 3D gridded query points
而不是n × 3的点数组。网格的X, Y, Z坐标
分别提供XVEC, YVEC和ZVEC。IN将作为3D逻辑返回
volume with SIZE(IN) = [LENGTH(YVEC) LENGTH(XVEC) LENGTH(ZVEC)],相当于
MESHGRID使用的语法。INPOLYHEDRON处理这个输入更快,而且更低
内存占用比使用MESHGRID制作完整的X、Y、Z查询点矩阵。

INPOLYHEDRON(…,'PropertyName',VALUE,'PropertyName',VALUE,…)测试查询
使用以下可选属性值的点:

TOL -对“内部”表面的测试公差。你可以想想
托尔是指一个点可能位于表面上/下且静止的距离
被认为是表面上的。由于数字四舍五入,什么都不可能
就在这里。默认为0。注意,在当前的实现TOL
只影响曲面三角形上方/下方的点(在z方向上)。
在XY平面上与顶点重合的点被认为是在曲面内。
可以通过用户的输入/反馈实现更正式的规则。

GRIDSIZE -在内部,INPOLYHEDRON使用分治算法
将所有的面分割成棋盘状的GRIDSIZE-by-GRIDSIZE区域网格。
性能需要在小的GRIDSIZE(迭代次数少,迭代次数多)之间进行权衡
一个大的GRIDSIZE(小数据的多次迭代)
计算)。甜蜜点已经通过实验确定(在win64上)
系统)与面/顶点的数量相关。你可以覆盖
通过指定GRIDSIZE参数自动计算选择。

FACENORMALS -默认情况下,面三角形的法线计算为
前两条三角形边的叉乘。您可以选择指定face
这里的法线是预先计算好的。

FLIPNORMALS -(默认为FALSE)。为了配合更广泛的惯例,三角形
面法线假定从物体表面指向外。如果
你的曲面法线被定义为指向内,那么你应该设置
将FLIPNORMALS选项设置为TRUE以使用此约定的相反内容。

例子:
Tmpvol = 0 (20,20,20);%空体素体积
Tmpvol (5:15,8:12,8:12) = 1;打开一些体素
Tmpvol (8:12,5:15,8:12) = 1;
Tmpvol (8:12,8:12,5:15) = 1;
Fv = isosurface(tmpvol, 0.99);创建补丁对象
阵线。Faces = fliplr(fv.faces);确保法线指向外侧
%测试分散的查询点
PTS =兰特(200,3)*12 + 4;提出一些疑问点
In = inpolyhedron(fv, pts);测试补丁内部的文件
图,按住,view(3) %显示结果
补丁(阵线,‘FaceColor’,‘g’,‘FaceAlpha’,0.2)
plot3(分(1)分(,2),分(3),‘博’,‘MarkerFaceColor’,‘b’)
plot3 (pts(~ 1),分(~,2),分(~,3),“罗”),轴的形象
%测试查询点的结构化网格
gridLocs = 3:2.1:19;
[x,y,z] = meshgrid(gridLocs,gridLocs,gridLocs);
in = inpolyhedron(fv, gridLocs,gridLocs,gridLocs);
图,按住,view(3) %显示结果
补丁(阵线,‘FaceColor’,‘g’,‘FaceAlpha’,0.2)
plot3 (x(在),y(中)、z(在),‘博’,‘MarkerFaceColor’,‘b’)
Plot3 (x(~in),y(~in),z(~in),'ro'),轴图像

引用作为

斯文(2022)。在多面体-点在一个三角形的体积?(//www.tianjin-qmedu.com/matlabcentral/fileexchange/37856-inpolyhedron-are-points-inside-a-triangulated-volume), MATLAB中央文件交换。检索

MATLAB版本兼容性
使用R2012a创建
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!