Matlab 2.5D Delaunay 三角剖分顶点法线

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?