假设我有一个多边形,我想对它进行网格划分。为了进一步对我得到的网格设置约束,我将提供一个固定点列表(必须位于多边形内),以便它们必须通过生成的三角形元素连接。
执行此操作的matlab命令是什么?我尝试了delaunay
命令,但它无法在凹多边形上工作,因为delaunay
命令将始终返回一个包含凸区域的元素列表。
答案 0 :(得分:5)
您要使用的功能是DelaunayTri
,您可以按照以下步骤操作:
以下是一些示例代码:
polygonVertices = [0 0;... %# Concave polygon vertices
0 1;...
1 1;...
0.5 0.5;...
1 0];
polygonEdges = [1 2;... %# Polygon edges (indices of connected vertices)
2 3;...
3 4;...
4 5;...
5 1];
otherVertices = [0.5.*rand(5,1) rand(5,1)]; %# Additional vertices to be added
%# inside the polygon
vertices = [polygonVertices; otherVertices]; %# Collect all the vertices
dt = DelaunayTri(vertices,polygonEdges); %# Create a constrained triangulation
isInside = inOutStatus(dt); %# Find the indices of inside triangles
faces = dt(isInside,:); %# Get the face indices of the inside triangles
现在变量faces
和vertices
可用于inOutStatus
。
查看plot the meshed polygon(注意:需要MathWorks帐户才能执行此操作),可以看到archived version documentation首次出现在版本7.8.0(2009a)中。在此之前,可用于执行2-D Delaunay三角剖分的唯一内置函数是DelaunayTri
,它基于delaunay
,因此无法支持非凸面的约束三角剖分或三角剖分。
较新的Qhull使用DelaunayTri
。因此,对于早于7.8.0的版本的用户,一个选项是CGAL来连接MATLAB中的CGAL例程。例如,如果您要对凹面多边形进行三角剖分,则可以创建一个MEX文件来连接create MEX-files之一,以便将凹多边形分解为一组凸多边形。然后convex partitioning routines in CGAL可用于对每个凸多边形进行三角测量,最后一组三角测量分组为凹多边形的一个较大的三角剖分。