如何在gmsh中提取边界节点处的法线向量?
Posted
技术标签:
【中文标题】如何在gmsh中提取边界节点处的法线向量?【英文标题】:How to extract the normal vectors at the boundary nodes in gmsh? 【发布时间】:2020-01-08 12:44:22 【问题描述】:我有一个 gmsh 的地理文件并将其网格化。然后我想在选定曲面的节点处提取法线向量。这怎么可能?
以下是我的 gmsh 地理文件。
//Construct a cube in GMSH
//Build a line
Point(1) = 0, 0, 0, 1.0;
Point(2) = 0, 0, 10, 1.0;
Line(1) = 1, 2;
//Extrude line to create a surface (square)
Extrude 10, 0, 0
Line1;
//Extrude surface to create a volume (cube)
Extrude 0, 10, 0
Surface5;
//Six surfaces of the cube
Physical Surface(28) = 18;
Physical Surface(29) = 26;
Physical Surface(30) = 22;
Physical Surface(31) = 14;
Physical Surface(32) = 27;
Physical Surface(33) = 5;
//Volume of the cube
Physical Volume(34) = 1;
【问题讨论】:
如何定义节点的法线?一般来说,节点属于几个曲面;因此,必须以某种方式定义法线的方向。您可以找到表面元素的法线(如果它是弯曲的 - 在属于表面元素的一点)。 嗨安东,感谢您的留言!正如您所说,例如,我希望在位于该表面内的给定位置 (x,y,z) 处具有物理表面 (28) = 18 的法线。如何在 gmsh 中找到它? 【参考方案1】:嗯,我不知道如何通过 GEO 文件脚本来实现(不过,如果它存在,我不会感到惊讶)。
但是,它当然可以通过 GMSH API 使用 getNormal()
函数来完成。
getNormal()
在参数坐标
parametricCoord
处使用标签tag
获取曲面的法线。parametricCoord
由成对的 u 和 v 坐标给出,连接起来:[p1u, p1v, p2u, ...]
。normals
以 x、y、z 组件的三元组形式返回,串联:[n1x, n1y, n1z, n2x, ...]
。输入:
tag
,parametricCoord
输出:
normals
GMSH API 可通过 Python、C/C++ 和 Julia 获得。具体用法建议直接看API is defined in GMSH repository怎么用。
【讨论】:
以上是关于如何在gmsh中提取边界节点处的法线向量?的主要内容,如果未能解决你的问题,请参考以下文章
使用 OnTriggerEnter 时如何获取物体撞击的法线向量?
UE5 Shader基础学习笔记——01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合