问题标签 [polyhedra]

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 回答
424 浏览

javascript - 给定一组点,如何在 Javascript 中生成多面体

我正在做一个材料科学的 WEBGL 可视化项目。我现在想要完成的是,我有一组原子的 3D 坐标。它们结合在一起。我想为每个分子创建一个多面体。

我注意到在Matlab 中有一个方便的函数alphaShape,它可以根据您的输入点确定最相似的形状并返回多面体的最佳匹配。

我尝试使用蛮力方法解决这个问题:我遍历整个点数组并用三个点的每个组合形成三角形。接下来的问题是如何检测要摆脱的面孔?因为一些三角形面将穿过与外围原子结合的中心原子。

我将不胜感激任何建议和想法!谢谢!

0 投票
0 回答
150 浏览

algorithm - Matlab中多个3D不规则多面体的重叠

我有一组多面体,每个多面体由 x、y 和 z 点的列表定义。如果我要将原始多面体重叠在一起,我想找到生成的多面体。

我已经使用边界(x,y,z)来找到每个多面体的边界三角形并查看了 SAT,但想不出任何可以得到重叠多面体顶点的算法。

注意:这些多面体每个有 30-40 个点,我大约有 5 个,所以任何粗略的蛮力方法很可能太慢了。

0 投票
2 回答
93 浏览

3d - 用已知面构建多面体

这个过程的名称是什么:从已知的二维面(例如:三角形)构造一个多面体,这些面具有顶点的连接数据?

更简单地说,如果我拥有 3D 的所有部分并且我知道哪些角应该连接到哪个角,那么用于计算 3D 对象的过程是什么?

此外,这项研究是否有常用的算法或良好的起点?

编辑:我想我说的是三角测量,但我不想生成多边形,我已经知道它们了。这些面需要在 3 个维度中定位,以便它们正确连接。

0 投票
2 回答
2730 浏览

algorithm - 检查凸多面体(方形金字塔)内是否有 3D 点的算法

我正在寻找强大的碰撞检测算法,并找到了Christer Ericson的一本名为Realtime Collision Detection的很棒的书。我正在尝试使用一种特定的算法来检查给定点是否在凸多面体内部(在 3D 空间中,这些是方形金字塔、立方体和四面体(也就是所有边都是三角形的金字塔))。就我而言,我有一个方形金字塔。通过使用给定数量的半空间的相交体积并确定该点是在由多面体的边跨越的所有平面的前面还是后面来完成该点的验证。我很难理解参数的用法n(见下文),它表示给定多面体的半空间数:

计算给DistPointPlane(...)定点和平面之间的距离

并且Plane是在 3D 空间中表示平面的结构

该算法的作用基本上如下:

  1. 对于给定的点,计算它到凸多面体每个平面的距离
  2. 检查距离是负数还是正数
    1. 如果距离为负,则点位于平面法线的另一侧,因此它在其后面。
    2. 其他点与平面法线位于同一侧,因此它在它的前面
  3. 如果点在给定多面体的所有平面后面,则它位于内部,否则位于外部

现在就我所知的方形金字塔而言,有 10 个半空间,因为我们有 4 个边和一个底,每个边代表一个单独的平面(因此总共有 5 个平面),将 3D 空间分成两个半空间(5 planes * 2 = 10 halfspaces)。我没有得到的是n上面算法的代码中的用法。它用作循环遍历Plane实例数组的终止条件。然而,如前所述,有 10 个半空格。

经过一番挖掘,我想到的一件事是两个平面之间的交点是一条线(金字塔的边缘)。进一步引用Wolfram Mathworld

要唯一指定线,还需要在其上找到一个特定点。这可以通过找到同时在两个平面上的点来确定

金字塔的每个顶点都满足这个要求,因为对于任何给定的两侧(包括底部),我们得到一条位于金字塔两个顶点之间的线。因此,就交集而言,我们确实有 5 个(基数为 4,顶点为 1)但是书中的文本(包括函数实现上方的注释)是模糊的,阅读它可能会得到错误的想法(至少那是我的情况)。

我的思路是否接近事实,还是我在数学知识方面遗漏了一些重要内容?

我已将代码移植到 Python 3 并更改了算法以仅循环遍历我的平面列表,而无需使用其他参数(如果我的想法正确,则与原始参数基本相同)并将其绘制为matplotlib. 它工作得很好,但我仍然想知道我是否理解正确:

在此处输入图像描述

0 投票
0 回答
100 浏览

c++ - CGAL Nef 多面体从多面体创建时导致段错误

我使用点来创建平面,然后取交点形成多面体,并使用这些多面体构造 nef 多面体。在我大约 2500 个多面体中,有一个似乎导致了段错误。

这是具有相同输入的复制:

0 投票
0 回答
230 浏览

matlab - 如何在matlab中确定3d圆和多面体之间的交点

我有一个包含多面体形状的工作区,因此我将工作区切成不同的 3D 圆圈。对于每个圆,要么与多面体发生交集,要么不发生交集。是否可以确定圆是否与MATLAB中的多面体相交,如果是,我如何确定由 3d 圆与多面体形状相交形成的多边形?

注意:3D 圆是 3D 空间中的圆形物体。为了便于理解,我附上了一个 MATLAB 图:

3D 圆-多面体相交

图中有 3 个圆形和 4 个多面体形状。任何帮助将不胜感激

0 投票
1 回答
82 浏览

cgal - CGAL:在 3D 中简化凸多面体

我一直在使用库来生成凸包,这些凸包进一步用于离散元素模拟。目前,我正在尝试使多面体粒子断裂,这现在实现为多面体的平面剪裁。问题在于,经过多次(有时甚至是一次)裁剪后,多面体开始具有“坏”属性,例如几乎退化的面、几乎共面的边缘或几乎退化的边缘,这会导致接触计算出现问题。我一直在查看CGAL/Surface_mesh_simplification例程并使用了该edge_collapse功能,但它并没有保留粒子的凸性。有没有办法使用中的例程进行凸多面体简化,同时保持凸性?

0 投票
0 回答
162 浏览

c++ - 编译器错误 Parma Polyhedra Library: undefined reference to `Parma_Polyhedra_Library::Init::Init()'

我从他们的官方网站下载了最新版本的 gmp 和 ppl 并且安装良好。AFAIS,所有库文件都在/usr/local/lib. 但是当我尝试通过包含ppl.hh头文件来编译和运行 C++ 文件时,我得到了错误,

的内容/usr/local/lib

简单的 C++ 文件是,

即使我尝试使用 运行它set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 ") ,仍然出现相同的错误。资源

Mac OSX 终端上的 g++

Ubuntu 上的 g++

0 投票
1 回答
607 浏览

c++ - 计算非凸多面体的外法线

如果多面体的所有节点(可能是非凸的)及其坐标已知,则按顺序给出面的点(逆时针或顺时针围绕外法线),我如何获得每个的外法线向量脸?

这是凸多面体的一种方法: 计算面法线和缠绕

一个可能是非凸的一般多面体怎么样?

0 投票
1 回答
47 浏览

finite-element-analysis - 除了通常的以外,还有其他有限元类型吗?

通过有限元类型,我特别指的是元素几何。我知道 Quad、Tri、Tet 和 Hex,但还有其他类型,例如六角棱柱、菱形等。