问题标签 [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.
cgal - 在 CGAL 中查找顶点周围的人脸?
不确定问题是否已经回答。我正在使用 CGAL 处理 tethedral 网格(medit 网格)文件。我需要找出这个网格中顶点周围的面。所以它将是一个顶点面迭代器。有谁知道 CGAL 是否有这种迭代器?
computational-geometry - 快速四面体化算法
我有一个凹体积,想尽快把它分解成四面体。我不太关心输出的质量,也不需要 Delaunay 四面体化。(具体来说,我不是在寻找 tetgen 或类似项目,它们会为工程应用生成高质量的 Delaunay 四面体化。我想要快)
什么是我可以使用的快速(如果不是那么高质量)算法?
intersection - 实现四面体 - 射线相交测试
我有一个关于四面体 - 射线交叉点的问题:
我试图实现一个四面体射线相交测试,它应该返回出射面的索引。对于交集,我关注了这篇博文,其中标量三元积用于交集测试:
http://realtimecollisiondetection.net/blog/?p=13
但是,我的代码总是返回与退出面相同的面。在尝试自己找到解决方案但没有成功后,我将非常感谢任何提示我的交叉测试中的错误可能存在的地方。
输入参数是射线的原点和方向、节点、面的索引、相邻四面体的索引和最后一个面的索引。出口面和出口四面体的索引是输出值。ScTP 计算标量三元积,sameSign 检查三个浮点数的符号是否相同。代码如下,谢谢帮助:
cgal - 在 MeshLab 中可视化具有无限顶点的四面体
我使用示例代码来计算 6 个顶点的四面体。返回的面不仅包含输入顶点,还包含无限的顶点。这会在 MeshLab 中产生可视化问题。我想知道如何解决这个问题?
示例代码如下
输出文件是
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中的相应元素相交)。可以帮我解决这个问题吗?请参考我的代码。
c++ - 四面体的重心坐标
我想就四面体的重心坐标寻求帮助:
按照我在这里找到的一种方法: http ://www.cdsimpson.net/2014/10/barycentric-coordinates.html 我实现了一个 C++ 函数来查找四面体中一个点的重心坐标:
但是,我的代码似乎计算了稍微错误的重心坐标 - 将我的结果与此处的参考实现进行比较:http: //dennis2society.de/painless-tetrahedral-barycentric-mapping 我的四个重心值都小于参考计算的值执行。
有人在我的实施中发现任何错误吗?非常感谢您的帮助!
python - 如何通过 matplotlib 绘制四面体网格?
我想通过 绘制一个四面体网格matplotlib
,下面是一个简单的四面体网格:
当然,在实际应用中,一个网格中的四面体数量可以很大。我在 google 中找不到任何有用的帮助信息。那么绘制四面体网格的更好方法是matplotlib
什么?
此外,我可以获得网格的所有三角形面。
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
c++ - 更快的四面体-四面体相交
对于我的一个项目,我需要可靠地检测 3D 空间中两个四面体之间的交叉点。我不需要点/线/面来知道是否存在交叉点。触摸也被认为是交叉点,但普通的三角形面不被认为是交叉点。经过一番努力以尽可能快地实现这一目标,我的解决方案变得如此可怕:
让有四面体
v0,v1
每个四面体有 4 个三角形
t[4]
,每个三角形有 3 个点p0,p1,p2
和法向量n
。计算两个四面体所有 4 个面的平面
所以平面上的任何点
p
都由方程给出n
飞机的法线在哪里。众所周知,这归结为计算d
对于每个四面体的每个三角形
测试 v0,v1 之间三角形与三角形交点的任意组合
所以只需在所有 16 种组合之间循环并使用三角形与三角形相交。
三角形v0.t[i]
与三角形的v1.t[j]
交点归结为:
计算平面之间的交点
这显然是光线(对于非平行平面),所以平面法线的简单叉积将给出光线方向
现在只需找到属于两个平面的交点。直接从法线的叉积利用行列式计算,光线计算如下:
有关更多信息,请参阅:
编译每个三角形的三角形射线交点的有符号距离间隔
所以简单地计算射线和三角形的每条边线之间的交点,记住最小和最大距离
pos
。我们不需要实际点,只需要pos
线/射线相交返回的参数的标量距离。检查两个三角形的范围是否重叠
如果重叠而不是
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
,因此任何额外的东西都会限制可用网格的最大大小。
所以我正在寻找的是这些中的任何一个:
- 如果可能的话,一些数学或编码技巧来加速当前的方法
- 不同的更快的方法
我绑定到BDS2006 Win32 C++,宁愿避免使用第 3 方库。
[Edit1] 样本数据
这是四面体点云作为测试的样本数据:
来自is normal的p?
点索引是正常的符号(如果三角形是共享的,所以法线指向相同的方式)并且是来自的三角形的索引。这里有一个示例测试:0,3,6,9...
pnt
n
s
t[4]
0,1,2,3,...
fac
dbg_cnt
交叉测试的计数器在哪里。对于这个网格,我得到了这个结果:
我调用了vols_intersect
10 次测试以使测量时间足够长。在这个数据集中放置的四面体都不会相交(导致最高时间)。在导致此网格的实际过程(太大而无法发布)中,计数如下:
mesh - 使用 Paraview 在 3D 域中显示 2D 单元格数据字段
我有一个由四面体和三角形元素(位于外表面)组成的.vtu 文件。我还在三角形元素上定义了一个 celldata 字段(例如nrc1),并且在四面体元素中为零。当我选择在 Paraview 中绘制该字段时,我只看到一个与 3D 元素对应的零字段,但在 2D 元素中没有该字段的痕迹。
有没有办法在 Paraview 中显示 2D 字段?
PD:我无法将 2D 单元数据字段插入点数据字段,因为部分信息(不连续性,...)会丢失。