首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求被封闭的3D曲面切割的3D单元的体积分数

求被封闭的3D曲面切割的3D单元的体积分数
EN

Stack Overflow用户
提问于 2015-09-22 07:16:05
回答 3查看 313关注 0票数 0

我有一个三维三角化的闭合曲面。该曲面沉浸在矩形笛卡尔栅格中。曲面以STL格式存储。我的目标是计算被表面切割的细胞的分数。换句话说,当一个单元与表面相交,并且实际上被它切割时,它被分为内部和外部子单元。我的目标是找出内部亚细胞和被表面切割的细胞的体积分数。例如,在下面的图片中,出于说明的目的显示了一个2D案例,我想要计算青色面积占总面积的比例(即cyan+grey)。

有人能帮我找到一种有效的方法/算法来做这件事吗?我可以用MATLABC实现。

EN

回答 3

Stack Overflow用户

发布于 2015-09-22 15:27:00

a exact method

首先,考虑将曲面与由平面分隔的半空间相交。

有些三角形完全在半空间内,并且保持不变。其他的一些完全在外面,被丢弃了。剩下的部分被切成两半,形成一个三角形和一个四边形。保留右侧部分,必要时对四边形进行三角剖分。

您还需要将生成的面视为位于曲面内部的平面区域。为此,请获取所有新边(从三角形与平面的截面产生的边),并将它们链接起来。我的意思是将具有公共顶点的线段连接在一起(注意数值精度);最终你会有一个或多个循环,形成简单的多边形。对这些多边形进行三角剖分(例如,通过修剪耳朵的方法)。

通过此过程,您可以获得一个新的三角化曲面,该曲面描述了所请求的交点。对定义单元格的六个平面重复上述操作,您将获得该单元格与曲面中封闭的体积之间的交点。

要计算其体积,您可以将每个三角形及其在固定平面上的投影形成的棱柱的体积相加;确保以代数方式(用符号)计算这些体积。

这是一个2D类比。“新边”是绿色的。

由于这个过程很耗时,如果您需要为整个网格的每个单元重复此过程,则成本会很高。您可以通过保留中间结果并逐片处理来简化计算。

在垂直于第一个平面的方向上的排序将加速拒绝外部三角形。

票数 1
EN

Stack Overflow用户

发布于 2015-10-30 01:41:15

除了Yves Daoust答案中的精确解决方案之外,如果近似解决方案是可接受的,为了获得合理有效的东西,我会将表面“光栅化”成更高清晰度的网格,并计算每个宏单元中微细胞的比例。为了“光栅化”表面,如果需要性能,我会使用GPU1(但这是痛苦的)。如果性能不是真正需要考虑的问题,那么您可以在每个三角形上循环,然后对于落在三角形边界框中的每个微单元,测试它是否与三角形相交。最后,整体填充体积的内部。

1

票数 0
EN

Stack Overflow用户

发布于 2018-06-01 22:31:50

我相信你需要通过PLIC method.The重建流体界面体积以下是VOF研究团体通常遵循的步骤{参考: Rider,W.J.,& Kothe,D.B. (1998)。重建音量跟踪。计算物理杂志,141(2),112-152。}。

步骤1:将方程式写入/开发到界面。在PLIC中,我编写了ax+by+c = 0形式的接口。如果您更喜欢二次/样条方程,请执行此操作。

步骤2:获取所有网格点的坐标。例如:如果你想开发一个x= 1:5和y= 1:5的网格,那么使用下面的方法

代码语言:javascript
复制
x = 1:5;
y = 1:5; 
[X,Y] = meshgrid(x,y);

**第三步:设置一个容差值(我用10^-7)来定义界面上的内部/外部/区域。

对于流体/液体域内的所有点(X,Y):

代码语言:javascript
复制
a*X+b*Y+c >tol

流体/液体域外的所有点(X,Y)

代码语言:javascript
复制
a*X+b*Y+c <-tol

界面上的点:

代码语言:javascript
复制
[-tol<=(a*X+b*Y+c)<=tol]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32705983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档