问题标签 [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 投票
1 回答
319 浏览

cgal - 在 CGAL 中查找顶点周围的人脸?

不确定问题是否已经回答。我正在使用 CGAL 处理 tethedral 网格(medit 网格)文件。我需要找出这个网格中顶点周围的面。所以它将是一个顶点面迭代器。有谁知道 CGAL 是否有这种迭代器?

0 投票
0 回答
356 浏览

computational-geometry - 快速四面体化算法

我有一个凹体积,想尽快把它分解成四面体。我不太关心输出的质量,也不需要 Delaunay 四面体化。(具体来说,我不是在寻找 tetgen 或类似项目,它们会为工程应用生成高质量的 Delaunay 四面体化。我想要快)

什么是我可以使用的快速(如果不是那么高质量)算法?

0 投票
1 回答
271 浏览

intersection - 实现四面体 - 射线相交测试

我有一个关于四面体 - 射线交叉点的问题:

我试图实现一个四面体射线相交测试,它应该返回出射面的索引。对于交集,我关注了这篇博文,其中标量三元积用于交集测试:

http://realtimecollisiondetection.net/blog/?p=13

但是,我的代码总是返回与退出面相同的面。在尝试自己找到解决方案但没有成功后,我将非常感谢任何提示我的交叉测试中的错误可能存在的地方。

输入参数是射线的原点和方向、节点、面的索引、相邻四面体的索引和最后一个面的索引。出口面和出口四面体的索引是输出值。ScTP 计算标量三元积,sameSign 检查三个浮点数的符号是​​否相同。代码如下,谢谢帮助:

0 投票
1 回答
138 浏览

cgal - 在 MeshLab 中可视化具有无限顶点的四面体

我使用示例代码来计算 6 个顶点的四面体。返回的面不仅包含输入顶点,还包含无限的顶点。这会在 MeshLab 中产生可视化问题。我想知道如何解决这个问题?

示例代码如下

输出文件是

0 投票
1 回答
227 浏览

matlab - 使用点测试找到两个四面体的交点

我是 Matlab 编程的新手。我有两个使用 EIDORS 和 Netgen 由四面体网格创建的模型。然后我需要使用 Matlab 根据四面体元素之间的交集创建一个地图。因此,为了找到交叉点,我尝试使用点测试方法。请参考链接。 http://steve.hollasch.net/cgindex/geometry/ptintet.html

让我们假设model1和model2。

首先,我从模型和创建的矩阵中提取顶点。

然后,我使用点测试方法来计算模型之间的交集。

对于模型 1,我有 3000++ 四面体元素,而模型 2 我有 8000++ 四面体元素。

为了计算交集,我一个接一个地循环确定两个模型之间的哪些元素有交集,然后我通过将model2的元素编号索引到model1的元素编号来创建一个矩阵。

但是,少数元素似乎为零,这是不可能的,因为模型 1 中的所有元素都应该至少与模型 2 中的一些元素相交。

因此,最后我希望得到一个矩阵,包括(模型1的元素数x模型2的元素数,它与模型1中的相应元素相交)。可以帮我解决这个问题吗?请参考我的代码。

0 投票
1 回答
3383 浏览

c++ - 四面体的重心坐标

我想就四面体的重心坐标寻求帮助:

按照我在这里找到的一种方法: http ://www.cdsimpson.net/2014/10/barycentric-coordinates.html 我实现了一个 C++ 函数来查找四面体中一个点的重心坐标:

但是,我的代码似乎计算了稍微错误的重心坐标 - 将我的结果与此处的参考实现进行比较:http: //dennis2society.de/painless-tetrahedral-barycentric-mapping 我的四个重心值都小于参考计算的值执行。

有人在我的实施中发现任何错误吗?非常感谢您的帮助!

0 投票
2 回答
3619 浏览

python - 如何通过 matplotlib 绘制四面体网格?

我想通过 绘制一个四面体网格matplotlib,下面是一个简单的四面体网格:

当然,在实际应用中,一个网格中的四面体数量可以很大。我在 google 中找不到任何有用的帮助信息。那么绘制四面体网格的更好方法是matplotlib什么?

此外,我可以获得网格的所有三角形面。

0 投票
1 回答
822 浏览

matlab - Check if a point (x0,y0,z0) lies inside a tetrahedron in Matlab

I have a tetrahedron defined by 4 points xi,yi,zi (i = 1 to 4)

To check if an arbitrary point x0,y0,z0 is inside the tetrahedron, I am taking the volume route i.e. I replace one of the points by x0,y0,z0 and obtain the volume of the tetrahedron. I say that if all the 4 computed volumes turn out to be positive, then it lies with in the tetrahedron. Is there a better way of doing this ?

Details of calculation here

0 投票
0 回答
1099 浏览

c++ - 更快的四面体-四面体相交

对于我的一个项目,我需要可靠地检测 3D 空间中两个四面体之间的交叉点。我不需要点/线/面来知道是否存在交叉点。触摸也被认为是交叉点,但普通的三角形面不被认为是交叉点。经过一番努力以尽可能快地实现这一目标,我的解决方案变得如此可怕:

  1. 让有四面体v0,v1

    每个四面体有 4 个三角形t[4],每个三角形有 3 个点p0,p1,p2和法向量n

  2. 计算两个四面体所有 4 个面的平面

    所以平面上的任何点p都由方程给出

    n飞机的法线在哪里。众所周知,这归结为计算d

    对于每个四面体的每个三角形

  3. 测试 v0,v1 之间三角形与三角形交点的任意组合

    所以只需在所有 16 种组合之间循环并使用三角形与三角形相交。

三角形v0.t[i]与三角形的v1.t[j]交点归结为:

  1. 计算平面之间的交点

    这显然是光线(对于非平行平面),所以平面法线的简单叉积将给出光线方向

    现在只需找到属于两个平面的交点。直接从法线的叉积利用行列式计算,光线计算如下:

    有关更多信息,请参阅:

  2. 编译每个三角形的三角形射线交点的有符号距离间隔

    所以简单地计算射线和三角形的每条边线之间的交点,记住最小和最大距离pos。我们不需要实际点,只需要pos线/射线相交返回的参数的标量距离。

  3. 检查两个三角形的范围是否重叠

    如果重叠而不是v0,v1相交...如果所有 16 个测试都没有发生重叠,v0,v1则不相交。

如您所见,需要计算很多东西。我的线性代数和矢量数学知识仅限于我使用的东西,所以很有可能有更好的方法。我尝试了很多方法来缓解这个问题,但没有任何运气(比如使用 bbox、bsphere、使用更简单的测试,利用光线和三角形边缘都在同一平面上等),但结果要么更慢,甚至错误(不算数)边缘情况正确)。

这是我实际的C++实现:

它是一个更大的计划的一部分。这_zero只是基于最小细节大小的零阈值。_fac3是三角形,_vol4是四面体。pnt.pnt.dat[]点和三角形都从fac.dat[]动态列表中索引。我知道这很奇怪,但它背后有很多事情要做(比如空间细分到片段等等,以加速它用于的过程)。

是和产品(这取决于它vector_mul(a,b,c)是否是向量)。a=cross(b,c)a=dot(b,c)c

我宁愿避免每个三角形/四面体的任何预先计算的值,因为即使现在这些类已经拥有相当多的信息(如父级、使用计数等)。而且由于我绑定到 Win32,因此内存仅限于左右1.2 GB,因此任何额外的东西都会限制可用网格的最大大小。

所以我正在寻找的是这些中的任何一个:

  1. 如果可能的话,一些数学或编码技巧来加速当前的方法
  2. 不同的更快的方法

我绑定到BDS2006 Win32 C++,宁愿避免使用第 3 方库。

[Edit1] 样本数据

这是四面体点云作为测试的样本数据:

来自is normal的p?点索引是正常的符号(如果三角形是共享的,所以法线指向相同的方式)并且是来自的三角形的索引。这里有一个示例测试:0,3,6,9...pntnst[4]0,1,2,3,...fac

dbg_cnt交叉测试的计数器在哪里。对于这个网格,我得到了这个结果:

我调用了vols_intersect10 次测试以使测量时间足够长。在这个数据集中放置的四面体都不会相交(导致最高时间)。在导致此网格的实际过程(太大而无法发布)中,计数如下:

0 投票
1 回答
324 浏览

mesh - 使用 Paraview 在 3D 域中显示 2D 单元格数据字段

我有一个由四面体和三角形元素(位于外表面)组成的.vtu 文件。我还在三角形元素上定义了一个 celldata 字段(例如nrc1),并且在四面体元素中为零。当我选择在 Paraview 中绘制该字段时,我只看到一个与 3D 元素对应的零字段,但在 2D 元素中没有该字段的痕迹。

有没有办法在 Paraview 中显示 2D 字段?

PD:我无法将 2D 单元数据字段插入点数据字段,因为部分信息(不连续性,...)会丢失。