1

我有一个形成表面(即三角剖分)的 3D 三角形列表。该结构是变形的三角形格子。我想知道晶格的 voronoi 镶嵌的变形六边形的面积相对于未变形晶格单元的其余区域(即相对于正六边形)的变化。事实上,我真的想要与这些三角形相关的六边形晶胞的面积平方变化的总和。

变形六边形面积

背景/数学细节:我用三角形格子来近似弯曲的弹性片。调整片材泊松比(弹性常数)的一种方法是在能量中添加“体积”应变能项。我正在尝试计算变形的弹性三角形晶格的“体积”应变能,定义为:U_volumetric = 1/2 T (e_v)^2,其中 e_v=deltaV/V 由面积的变化决定一个 voronoi 单元相对于其参考区域,这是一个已知常数。

参考:https ://www.researchgate.net/publication/265853755_Finite_element_implementation_of_a_non-local_particle_method_for_elasticity_and_fracture_analysis

想:

Sum[ (DeltaA/ A).^2 ]在所有六角形单元格上。

我的数据存储在变量中:

xyz = [ x1,y1,z1; x2,y2,z2; etc] %3D 中的顶点/粒子

TRI = [ vertex0, vertex1, vertex2; etc] %第一个三角形的粒子 所在vertex0的行在哪里。xyzvertex 0

NeighborList = [ p1n1, p1n2, p1n3, p1n4, p1n5,p1n6 ; p2n1...] % 其中 p1n1 是粒子 1 的第一个最近邻,作为 xyz 的行索引。例如,xyz(NL(1,1),:)返回xyz粒子 1 的第一个邻居的位置。

AreaTRI = [ areaTRI1; areaTRI2; etc]

我在 MATLAB 中写这个。

到目前为止,我将每个顶点的面积近似为三角形面积的 1/3,然后对 6 个最近邻三角形求和。但是 voronoi 单元面积不会完全等于 Sum_(i=0,1,...5) 1/3* areaTRI_i,所以这是一个不好的近似值。请参阅上面链接中的图像,我认为这更清楚了。

4

1 回答 1

0

您可以使用文件交换上的DUALMESH -submission 来执行此操作:

DUALMESH 是一个网格处理例程的工具箱,允许基于底层单纯三角剖分构建“双”网格。支持各种平面和曲面三角剖分类型,包括非 Delaunay 和非流形类型。

只需使用以下命令生成areas所有对偶元素区域的向量。排序将对应于节点xyz

[cp,ce,pv,ev] = makedual2(xyz, TRI);
[~,areas(cp(:,1))] = geomdual2(cp,ce,pv,ev);

您可能想使用以下方法查看边界区域:

trisurf(TRI, xyz(:,1), xyz(:,2), areas);

边界节点的对偶单元理论上是无界的,因此应该有无限的面积。但是,此提交以不同的方式处理它:它将返回无界单元与原始网格的交集,而不是无界单元。

另请注意,如果您正在使用的网格不是平面的,则您的问题没有明确定义,因为双网格单元将是平面的,并且不会以与三角形相同的方式缩放。所以这个解决方案可能只有在你的网格真的是 2D 时才能正常工作。(据我所知,您提到的论文也仅适用于 2D 案例。)

于 2015-02-21T10:39:49.847 回答