问题标签 [tetrahedra]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
11 浏览

distance - 如何确定点到四面体表面的距离?

四面体由点给出:p0 = (2, -1,0), p1 = (2,1,0), p2 = (-1,1,0), p3 = (1,0,4)

点 p = (x, y, z) 位于四面体内部。如何确定点 p 到四面体表面的距离?

0 投票
0 回答
15 浏览

3d - CGAl 3D 网格生成概念

我正在尝试了解 CGAL 3D 网格生成的一些概念。在我的特殊情况下,我试图在给定多面体网格的情况下生成四面体网格。我作为示例使用的多面体网格有两个未连接的凸区域。

在此处输入图像描述

如果我正确理解 CGAL 文档,3D 网格生成会创建一个三角剖分,它是一些点的凸包的四面体网格,在这种情况下,是我的输入多面体网格中的点。

三角剖分中的一些四面体可能在我的多面体网格之外,因此 CGAL 在生成 3D 四面体网格时实际返回的是一个对象,在 CGAL 文档中称为 C3T3,它可以查询内部是否有四面体、小平面、段或点我的多面体网格。这是正确的吗?

我做了一个小检查,我有以下输出:

在此处输入图像描述

我不明白其中一些结果。首先,我不明白 和 之间的number_of_facets/cells区别number_of_facets/cells_in_complex。为什么它们返回相同的值,在这种情况下它们返回不同的值。

number_of_vertices_in_complex我也对and有疑问number_of_corners。这显然返回了我原始输入网格中的顶点数量。如果是这种情况,number_of_facets/cells[_in_complex]` 是否也返回有关我的原始输入网格的数据?如何获得四面体网格中的顶点数?

最后,如果我想迭代四面体网格的单元格/面/点,我必须使用 c3t3 迭代器还是三角剖分器?这对我来说不清楚,尽管我认为我必须使用 c3t3 的。

0 投票
0 回答
23 浏览

matlab - 具有相关值的四面体网格

我使用的软件导出与四面体网格相关的值,如下所示:

我不关心连接,我只关心 (x,y,z) 坐标值 (ElemSolution) 对应的值。但是我有 14 个 ElemSolution 值,但只有 9 个坐标。这些值对应于哪里?

另外,是否有一个原生的 matlab 函数来理解这种表示?

0 投票
0 回答
44 浏览

mesh - CGAL Mesh_3:如何使用 Polyhedral_complex_mesh_domain_3 粘附到域内的表面?

目标

我的输入是:

  • 形成域边界的几个补丁和
  • 域内的一个或多个表面。

我想要获得的是一个四面体网格:

  1. 填满整个域,
  2. 符合内表面和
  3. 它的边界顶点有一个对应于它们的输入补丁的 ID。

一种可能性是将输入补丁合并到一个网格中,并使用文档中的示例Remeshing a polyhedral domain withsurfaces;这很好用,但只满足要求 1 和 2。

另一种可能性是,在这里学习了如何保留补丁 ID后,修改示例以使用Polyhedral_complex_mesh_domain_3而不是使用子域Polyhedral_mesh_domain_with_features_3访问构造函数。到目前为止,我的解决方案(见下文)满足要求 2 和 3,但不满足要求1。

到目前为止的代码

作为一个简单的例子,我将文件Horizo​​ns-domain.off一分为二;第一个文件包含前 10 个,第二个文件包含剩余的 2 个三角形。

侧面关闭

关闭

子域.cpp

当我编译和运行时

(horizo​​ns 是文档中的示例文件),四面体尝试符合内表面,保留 ID 但填充整个域:

到目前为止的结果

我也试过换行

这导致了稍微好一点的结果,但仍远未达到要求 3。

改善结果

我该如何解决?我std::pair在子域的 s 中尝试了 1 和 0 的各种组合,但没有成功。

0 投票
1 回答
52 浏览

c++ - CGAL::Polyhedron_3 使用 make_tetrahedron() 生成不需要的重复顶点,如何解决?

我试图使用CGAL::Polyhedron_3数据结构创建体积网格,但在进行一些测试时,我注意到该make_tetrahedron函数复制了多面体中已经存在的顶点。

示例:共享一个共同面的两个四面体

这是我试过的代码:

这是我希望看到的输出:


但这就是我得到的:

现在,问题是:是否可以在使用该函数
时仅将一个点存储为顶点一次?CGAL::Polyhedron_3make_tetrahedron

0 投票
0 回答
54 浏览

algorithm - 在 DeWall 算法中创建第一个三角形(Delaunay 三角剖分)

我正在尝试了解DeWall算法的特定方法来执行 2D/3D delaunay 三角剖分/四面体化 (DT)。我对 3D 案例特别感兴趣。在其他分治算法创建部分 DT 并将它们合并在一起的情况下,DeWall 算法直接沿着分层切割构建 DT :

纸上的德沃尔图

但是,我在构建第一个单纯形的一开始就被困住了。在Cignoni 1997 - DeWall: A Fast Divide & Conquer Delaunay Triangulation Algorithm in Eᵈ</a> 作者写道

MakeFirstSimplex 选择离平面 α 最近的点 p₁ ∈ P。然后它选择第二个点 p2,使得 p2 是在 α 的另一侧离 p1 最近的点。然后,它搜索点 p3,使得围绕 1 面 (p1, p2) 的外接圆和点 p3 具有最小半径;(p1 ; p2; p3) 因此是 Σ 的 2 面。该过程继续进行,直到构建所需的 d-单纯形。

但是,如果我理解正确,这个过程应该总是导致一个确实属于 DT 的单纯形,但是当我用不同的点集测试它时,有时似乎会选择属于 DT 的边。

我通过将(绿色)每个点(橙色)连接到其左右最近的邻居来测试这一点。还显示了使用三角形程序(灰色)和局部左右分割平面(黑色)制作的 DT 。

自己测试 自己的测试放大

在上面放大的图片中,绿色边缘是由该程序挑选的,但其中一个不是灰色 DT 的一部分。因此,在类似的情况下,最高点的平面 α 会在该点的右侧,而 α 将是 DeWall 算法的剖切面,这将导致错误的单纯形。

众所周知,最近邻图始终是 DT 的一部分,但这对我们的情况没有帮助,因为不能保证切面 α 总是穿过其中之一。

有没有解释为什么这首先应该起作用,一些技巧或替代结构来获得那个受约束位置的第一个单纯形?