如何解决Matlab 2.5D Delaunay 三角剖分顶点法线
我正在尝试做我认为在 Matlab 中称为 2.5D delaunay 三角剖分和顶点法线计算的工作。使用 delaunayTriangulation 类和相关函数,我可以对 x,y 平面进行三角测量并获得所需的网格。但是,尝试提取表面法线只会产生平坦表面的法线。这是完全有道理的,因为我只向 delaunayTriangulation 提供了 2D 数据,但我不知道 vertexnormal() 函数在这种情况下有什么用处。我缺少什么 - 如何提取具有高度属性的三角网格的法线?
我了解如何使用 surform() 或类似函数对网格执行此操作,但我希望这也适用于散点,而无需对其进行网格化。
工作示例来说明:
% Generate some data
rng(42); % Seed random gen
[X,Y] = meshgrid( 1:100,1:100 );
k = ones(15)./(15^2);
Z = conv2(rand(size(X)),k,'same'); % Smooth data to have a nice surface to test with
% Triangulate
DT = delaunayTriangulation(X(:),Y(:));
% DT.vertexnormal are all [0 0 1] (flat surface...) - makes sense.
DT3 = delaunayTriangulation(X(:),Y(:),Z(:));
% DT3.vertexnormal() --> gives error because we Now did 3D delaunayTrinagulation and have tetraheders,not triangles. Also makes sense.
% DT.Points = [DT.Points,Z(:)]; --> Something crazy like trying to add Z points after triangulation gives error,obvIoUsly
解决方法
我想通了,但会在此处为有需要的其他人发布答案。这显然是 triangulation() 函数的用途:
% Triangulate 2D
DT = delaunayTriangulation(X(:),Y(:));
% Triangulate 3D ("2.5D")
DT_3D = triangulation( DT.ConnectivityList,X(:),Y(:),Z(:) );
% Calculate vertex normals
vertex_normals = DT_3D.vertexNormal();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。