inpolyhedron——点在三角形体积?

测试3 d点是在一个网格。或者,voxelise面具从表面。网格也可以非凸!

6.6 k下载

更新2015年11月12日

查看许可协议

编者按:这个文件被选为MATLAB中央选择的

INPOLYHEDRON测试点是否在3 d三角形(脸/顶点)表面
用户注意:
inpolyhedron采用广泛使用的惯例,表面面法线指出从对象。如果你面临着点,简单地调用inpolyhedron (…,“flipNormals”,真的)。
(见讨论http://blogs.mathworks.com/pick/2013/09/06/inpolyhedron/)
在= INPOLYHEDRON(阵线,QPTS)测试如果查询点(QPTS)内
补丁/表面/多面体阵线(结构和字段定义的“顶点”
“脸”)。QPTS N-by-3的XYZ坐标。在是一个n×1逻辑
向量将对每个查询点内表面。
INPOLYHEDRON(脸,顶点,…)分别以脸/顶点,而不是
一个阵线结构。

在= INPOLYHEDRON (…,X, Y, Z) voxelises a mask of 3D gridded query points
而不是一个N-by-3点的数组。X, Y, Z坐标网格
提供在XVEC YVEC, ZVEC分别。在将返回3 d逻辑
卷的大小(在)= ((YVEC) (XVEC)的长度(ZVEC)],相当于
MESHGRID所使用的语法。INPOLYHEDRON处理这个输入速度和较低
内存占用比使用MESHGRID充分X, Y, Z查询点矩阵。

INPOLYHEDRON (…,“PropertyName”,价值,“PropertyName”,价值,…)查询测试
点使用下面的可选属性值:

托尔——宽容“内部”的测试表面。你能想到的
托尔作为一个点的距离上面/下面可能隐藏的表面,而且还
被视为表面上。由于数值四舍五入没有什么可以永远
做到底。默认值为零。注意,在当前实现中托尔
只会影响点躺高于/低于表面三角形(z)。
点与一个顶点重合XY平面内被认为是表面。
更加正式的规则可以实现输入/来自用户的反馈。

GRIDSIZE——在内部,INPOLYHEDRON使用分治算法
脸上分割成一个chessboard-like GRIDSIZE-by-GRIDSIZE区域的网格。
性能将成为权衡一个小GRIDSIZE(几个迭代,更多
每个迭代数据)和一个大GRIDSIZE(很多小数据的迭代
计算)。目的是实验(win64决定
系统)与脸的数量/顶点。您可以覆盖
通过指定一个GRIDSIZE参数自动计算选择。

FACENORMALS——默认情况下,脸的法线三角形的计算
叉积前两个三角形的边。你可以选择指定的脸
如果他们已经预先计算法线在这里。

FLIPNORMALS -(默认值FALSE)。与一个更广泛的惯例,三角形
面法线假定指出从对象的表面。如果
你的表面法线定义指向,那么你应该设置
FLIPNORMALS选择正确使用本公约的逆转。

例子:
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;
阵线=等值面(tmpvol, 0.99);%创建补丁对象
阵线。面临= fliplr (fv.faces);%确保法线指出
%测试分散查询点
分=兰德(200 3)* 12 + 4;%做一些查询点
在= inpolyhedron(阵线,分);%在补丁测试
图,等等,视图(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);
在= inpolyhedron(阵线,gridLocs、gridLocs gridLocs);
图,等等,视图(3)%显示结果
补丁(阵线,‘FaceColor’,‘g’,‘FaceAlpha’, 0.2)
plot3 (x(在),y(中)、z(在),‘博’,‘MarkerFaceColor’,‘b’)
plot3 (x (~), y (~)、z(~),“罗”),轴的形象

引用作为

斯文(2023)。inpolyhedron——点在三角形体积?(//www.tatmou.com/matlabcentral/fileexchange/37856-inpolyhedron-are-points-inside-a-triangulated-volume), MATLAB中央文件交换。检索

MATLAB版本兼容性
创建R2012a
兼容任何释放
平台的兼容性
窗户 macOS Linux

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!
版本 发表 发布说明
3.3.0.0

使用引用分号‘:’内函数处理调用符合新的2015 b语法翻译
固定的标题。

1.8.0.0

固定在查询时不确定的行为
点谎言*是*符合一个“突出”顶点。

1.7.0.0

把一个上限为巨大的trianulations gridsize防止内存问题。

1.6.0.0

v3.1——下降嵌套独特的调用通过v2.1网格点的处理。通过优化更新网格大小选择。

1.5.0.0

新公约采用期望面对法线指向
面向垂直的脸现在忽略。结果在加速和bug修复。

1.4.0.0

失去了最后上传的图标…

1.3.0.0

大大改善网格的处理输入。现在不再解包3 d网格。节省了大内存占用!

1.2.0.0

添加逻辑来考虑查询点重合与一个顶点在(之前考虑了)

1.1.0.0

加速调整网格位置分配方面,路要走,accumarray ()

1.0.0.0