pointLocation
包含点的三角形或四面体
语法
说明
示例
查找三角剖分中包围一组查询点的三角形。
定义三角剖分的点和连接。
TP = [2.5 8.0;
6.5 8.0;
2.5 5.0;
6.5 5.0;
1.0 6.5;
8.0 6.5];
C = [5 3 1;
3 2 1;
3 4 2;
4 6 2];
TR = triangulation(C,TP);定义两个查询点。
P = [2.25 7; 6 6.5];
绘图三角剖分和查询点。
triplot(TR) hold on plot(P(:,1),P(:,2),"k*") ylim([4 9]) xlim([0 9])

确定包围每个查询点的三角形的 ID。
ID = pointLocation(TR,P)
ID = 2×1
1
3
用红色突出显示包围查询点的三角形。
triplot(TR.ConnectivityList(ID,:),TP(:,1),TP(:,2),"r")
查找三维三角剖分中包围一组查询点的四面体。
基于一组三维点创建德劳内三角剖分。
rng default
x = rand([20 1]);
y = rand([20 1]);
z = rand([20 1]);
TR = delaunayTriangulation(x,y,z);查找包围查询点的四面体的 ID 并计算查询点的重心坐标。
P = [0.7 0.6 0.3;
0.5 0.5 0.5];
[ID,B] = pointLocation(TR,P)ID = 2×1
9
8
B = 2×4
0.2046 0.0893 0.5721 0.1340
0.1900 0.1495 0.6422 0.0183
确定哪些查询点位于二维三角剖分的三角形的边和顶点上。
定义三角剖分的点和连接。
TP = [2.5 8.0;
6.5 8.0;
2.5 5.0;
6.5 5.0;
1.0 6.5;
8.0 6.5];
C = [5 3 1;
3 2 1;
3 4 2;
4 6 2];
TR = triangulation(C,TP);定义查询点。
P = [2.25 7;
6 6.5;
2.5 8.0;
4.5 5.0;
8 6.5
7.5 7.5];查找每个查询点相对于包含该点的三角形的重心坐标。对于三角剖分外部的点,pointLocation 返回 NaN。
[~,B] = pointLocation(TR,P)
B = 6×3
0.1667 0.2500 0.5833
0.1250 0.3750 0.5000
0 0 1.0000
0.5000 0.5000 0.0000
0 1.0000 0
NaN NaN NaN
使用重心坐标确定查询点是位于顶点上、边上、三角形内还是三角剖分外。如果查询点位于顶点上,则其重心坐标之一为 1,其他坐标为 0。如果查询点位于边上但不与顶点重合,则其重心坐标之一为 0,其他坐标均不为 1。对于三角剖分外的查询点,重心坐标为 NaN。
M = size(B,1); loc = cell(M,2); tol = 1e-10; for i = 1:M b = B(i,:); loc{i,1} = P(i,1:2); if ismembertol(1,b,tol) loc{i,2} = "Vertex"; elseif ismembertol(0,b,tol) loc{i,2} = "Edge"; elseif isnan(B(i)) loc{i,2} = "Outside"; else loc{i,2} = "Triangle"; end end loc
loc=6×2 cell array
{[ 2.2500 7]} {["Triangle"]}
{[ 6 6.5000]} {["Triangle"]}
{[ 2.5000 8]} {["Vertex" ]}
{[ 4.5000 5]} {["Edge" ]}
{[ 8 6.5000]} {["Vertex" ]}
{[7.5000 7.5000]} {["Outside" ]}
绘图三角剖分和查询点。
triplot(TR) hold on plot(P(:,1),P(:,2),'k*')

输入参数
三角剖分表示法,指定为标量 triangulation 或 delaunayTriangulation 对象。
数据类型: triangulation | delaunayTriangulation
查询点,指定为 2 列矩阵(二维)或 3 列矩阵(三维)。P 包含查询点的 x 坐标和 y 坐标,还可能包含 z 坐标。
数据类型: double
查询点的 x 坐标,指定为列向量。
数据类型: double
查询点的 y 坐标,指定为列向量。
数据类型: double
查询点的 z 坐标,指定为列向量。
数据类型: double
输出参量
包含查询点的三角形或四面体的三角形或四面体 ID,以列向量形式返回。三角形或四面体 ID 是 ConnectivityList 属性中对应三角形或四面体的行号。
如果查询点位于两个或多个三角形或四面体的边界上,将返回最大 ID。
ID 包含不位于三角剖分的三角形或四面体中的点的 NaN 值。
数据类型: double
每个查询点相对于包含它的三角形或四面体的重心坐标,以 3 列矩阵(二维)或 4 列矩阵(三维)形式返回。
如果查询点在顶点上,则其重心坐标之一为 1,其他为 0。
如果查询点在边上,则其重心坐标之一为 0,其他均不为 1。
如果查询点在三角形内,则其所有重心坐标均为非零值。
如果查询点在三角剖分外,则所有重心坐标均为
NaN。
数据类型: double
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。
版本历史记录
在 R2013a 中推出不推荐以下将 DelaunayTri 对象用作德劳内三角剖分表示 DT 的语法:
ID = pointLocation(DT,P)针对ID矩阵中的每个查询点位置返回封闭单纯形(三角形/四面体)的索引P。点P(k,:)的封闭单纯形是ID(k)。对于凸包以外的所有点,pointLocation返回NaN。当用于二维和三维环境时,
ID = pointLocation(DT,x,y)和ID = pointLocation(DT,x,y,z)允许以列向量格式指定查询点位置。[ID,B] = pointLocation(...)返回重心坐标BC。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)