假设我有一个多边形,我想对它进行网格化.为了进一步对我得到的网格施加约束,我将提供一个固定点列表(必须位于多边形内),以便它们必须通过生成的三角形元素连接.
什么是matlab命令呢?我尝试了delaunay命令,但它无法在凹面多边形上工作,因为该delaunay命令将始终返回一个包含凸面区域的元素列表.
您要使用的功能是DelaunayTri,您将按照以下步骤执行此操作:
inOutStatus(也在上面链接的答案中说明).这是一些示例代码:
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
Run Code Online (Sandbox Code Playgroud)
而现在的变量faces,并vertices可以用来绘制网格多边形.
查看存档版本文档(注意:需要MathWorks帐户),可以看到DelaunayTri第一次出现在版本7.8.0(2009a)中.在此之前,可用于执行2-D Delaunay三角测量的唯一内置功能delaunay是基于Qhull,因此无法支持非凸面的约束三角测量或三角测量.
较新的DelaunayTri使用CGAL.因此,对于早于7.8.0的版本的用户,一个选项是在MATLAB中创建MEX文件以接口CGAL例程.例如,如果您要对凹面多边形进行三角剖分,则可以创建一个MEX文件来连接CGAL中的一个凸分区例程,以便将凹多边形分解为一组凸多边形.然后delaunay可以用于对每个凸多边形进行三角测量,并且最终的三角测量集合成凹多边形的一个更大的三角剖分.
| 归档时间: |
|
| 查看次数: |
4027 次 |
| 最近记录: |