问题标签 [cgal]

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

c++ - 在 XYZ 坐标中有对象,如何将 Z 更改为 X 保持视觉几何完整?

所以我们有一个从 Maya 导出的对象。假设我们将它显示在 XYZ 轴上。我们看着它,它看起来像需要的那样。但我们希望在 ZYX 中看到相同的画面。如何对对象进行这样的更改?

(2d 中的示例)我们看到:

在此处输入图像描述

我们需要看到:

在此处输入图像描述

而 Y 应保持原样。如何用CGAL做这样的事情?

0 投票
1 回答
101 浏览

c++ - 从与 CGAL::assign 兼容的 CGAL 类派生

我想从 CGAL::Parabola_segment_2 类派生。因为我想访问两个无法通过公共成员函数访问的受保护数据成员。

我的代码可以编译并运行,但下面给出的代码中的 if 语句永远不会返回 true。但我确信它必须为某些值返回 true。

如果我改变

然后程序完全按照我的意愿执行,但我无法访问我想要的变量。我的问题是我应该如何派生 CGAL 类以使其与 CGAL::assign() 函数兼容?

0 投票
1 回答
293 浏览

cgal - Delaunay三角剖分:顶点存储Point_handle而不是Point

我将点存储在自定义容器中,我想在这些点的子集上构建 Delaunay 三角剖分。

由于容器中已经存在这些点,我不希望 Delaunay 三角剖分存储这些点的副本。

我的点类是从 Point_3 派生的,包含几个信息(布尔值和整数)。

为此,我创建了一个自定义 triangulation_vertex 类:

要在 Delaunay 三角剖分中插入一个点,我会:

其中 p 是一个 point_handle(即 My_point*)。

要删除 Delaunay 三角剖分中的一个点,我会:

其中 dvh 是一个 vertex_handle。

在三角剖分中插入点工作正常,但我在删除点时遇到问题。我的自定义顶点类不正确吗?

有更好的方法吗?

--edit-----

dt is the Delaunay triangulation:

--

@sloriot: Is this a good start ?

0 投票
1 回答
125 浏览

c++ - 基于 btIDebugDraw 的 CGAL 渲染器(没有 QT)?

是否有一组复杂的结构/渲染器(如 Nef Polyhedra 和 Polyhedron - 都适合我)和一个简单的渲染器(引擎),可以像子弹一样工作btIDebugDraw- 虚拟类- 你实现 fiew 渲染函数,提供该渲染的实例构造渲染器的引擎对象(在子弹情况下World likebtDiscreteDynamicsWorld)在这里它将是 Nef Polyhedra 或 Polyhedron 渲染器。CGAL中有这样的课程吗?或者如何使用btIDebugDraw渲染多面体(CGAL::Polyhedron_3<Kernel>)和Nef多面体(CGAL::Nef_polyhedron_3<Kernel>)的现成实现?

0 投票
0 回答
273 浏览

c++ - 如何将复杂的三角形数组加载到 CGAL 的 Nef Polyhedra 中以对其进行 3D 布尔运算?

所以我有一组顶点+三角形(不是一个封闭的实体;多个三角形有些统一,而不是N个岛/平面)。我想将所有这些顶点+三角形视为一个 Nef Polyhedra 并对它们执行布尔运算。如何将所有未连接的三角形加载到 Nef Polyhedra 中?(我的内核是Exact_predicates_exact_constructions_kernel

0 投票
1 回答
241 浏览

cgal - 从cgal中提取代码

我想在我的项目中使用 CGAL 的半边数据结构。

由于它是由 LGPL 授权的,我更愿意将这个小块与我的软件一起分发,而不是要求在用户的系统上安装这个大库。

所以我的问题是,Cgal 是否有类似 boost 的 bcp 的东西?我开始手动复制半边源文件,但它看起来相当复杂。

先感谢您

0 投票
5 回答
23837 浏览

c++ - 为什么 KD 树对于点集中的最近邻搜索如此缓慢?

我正在使用 CGAL 的(最新的)KD-tree 实现来搜索点集中的最近邻。而且 Wikipedia 和其他资源似乎表明 KD-trees 是要走的路。但不知何故,它们太慢了,Wiki 还建议它们的最坏情况时间为 O(n),这远非理想。

[BEGIN-EDIT] 我现在使用“nanoflann”,它比 CGAL 中的 K-neighbor 搜索快 100-1000 倍。我正在使用“Intel Embree”进行光线投射,它比 CGAL 的 AABB 树快大约 100-200 倍。 [结束编辑]

我的任务如下所示:

我有一个巨大的积分集,比如最多 100 mio。积分!!并且它们的分布在三角几何的表面上(是的,光子示踪剂)。所以可以说它们在 3D 空间中的分布是 2D,因为它在 3D 中是稀疏的,但在查看表面时是密集的……这可能是问题所在吗?因为对我来说,这似乎触发了 KD 树的最坏情况性能,它可能可以更好地处理 3D 密集点集......

CGAl 非常擅长它的工作,所以我有点怀疑他们的实现很糟糕。我用于光线追踪的他们的 AABB 树在几分钟内在地面上燃烧了十亿条光线......我想这很了不起。但另一方面,他们的 KD-tree 甚至无法处理 mio。在任何合理的时间点和 250k 样本(点查询)......

我想出了两个解决方案,它们可以摆脱 KD-trees:

1) 使用纹理贴图将光子存储在几何体的链表中。这始终是 O(1) 操作,因为无论如何您都必须进行光线投射......

2) 使用视图相关的切片哈希集。那就是你离得越远,哈希集就越粗糙。所以基本上你可以在 NDC 坐标中考虑一个 1024x1024x1024 的栅格,但是使用哈希集来节省稀疏区域的内存。这基本上具有 O(1) 复杂性并且可以有效地并行化,对于插入(微分片)和查询(无锁)都是如此。

前一种解决方案的缺点是几乎不可能对相邻的光子列表进行平均,这在较暗的区域避免噪声很重要。后一种解决方案没有这个问题,应该在功能方面与 KD-trees 相提并论,只是它具有 O(1) 最坏情况下的性能,哈哈。

所以你怎么看?糟糕的KD树实现?如果没有,对于有界最近邻查询,是否有比 KD 树“更好”的东西?我的意思是我没有反对我上面的第二个解决方案,但是提供类似性能的“经过验证的”数据结构会更好!

谢谢!

这是我使用的代码(虽然不可编译):

0 投票
3 回答
6806 浏览

3d - 计算两个网格之间的豪斯多夫距离

我试图找到两个网格之间的偏差。例如,在 3d 空间中定义的两组点之间的差异,我计划使用一些 3d 可视化工具来可视化距离,例如 QT3d 或一些基于开放 gl 的库。

我有两组网格,基本上是两个 .stl 文件。我已经编程将它们作为输入读取。现在我需要计算相应网格之间的偏差。为此,我知道豪斯多夫距离是一种可能的数学工具。有没有计算两个网格之间的豪斯多夫距离的库?

我设法找到了一段代码。但它本身或多或少是一个程序。它叫做MESH我不想按原样使用它,因为,1. 它是用 C 语言编写的,2. 我想开发自己的应用程序(当然使用库)。

这个论坛上问的其他问题都指向数学算法,我不打算自己实现算法。

我正在使用 QT5 使用 msvc2010(32 位)进行编程。

此致

tdk.

0 投票
1 回答
296 浏览

mesh - 柏拉图式(阿基米德)实体的 3d 点到面的映射

我想计算得到的柏拉图(或者可能是阿基米德)实体的表面网格,并为每个面应用置换贴图。网格应显示位移图的精细细节,并且是水密和多方面的(用于 3D 打印)。

为此,我考虑过使用 CGAL 隐式函数 3d 曲面网格划分器。然后,我会将每个体素点映射到相应的面部,应用从体素空间到面部的坐标系变换,并查找面部的高度场。我知道如何为每个面构建变换矩阵,所以我想到了以下算法来测试实体中是否包含体素:

  1. 找到离点A最近的人脸
    • 对于给定的点 A,通过迭代所有顶点并比较与 A 的距离,找到柏拉图式(阿基米德)实体的 3 个最近顶点
    • 根据顶点数组中最小的索引对3个顶点进行排序
    • 从顶点索引中构建一个整数(字典索引): (v[0] n n+v[1]*n+v[3]*1) 其中 n 是顶点的数量
    • 迭代一个元组数组(字典索引,人脸)并找到具有相同字典索引的人脸
  2. 每个面都有一个预先计算的变换矩阵和一个高度场。应用变换矩阵并查找高度场以了解 A 是在实体内部还是外部

我想存在更好的解决方案,尤其是寻找合适的面孔?另一种方法可能是不使用表面网格器,而是从面中构建表面:获取每个面的位移图并将变换矩阵应用于它以构建实体,但是我需要简化每个面网格并将它们合并不知何故,结果是水密和多方面的(如果置换贴图具有某些值,则面应该支持孔),所以我认为具有隐式函数的基于体素的方法是最通用的工具。

0 投票
3 回答
13318 浏览

c++ - Qt4 + CGAL - “BOOST_JOIN”解析错误

Parse error at "BOOST_JOIN"尝试使用 Qt4 和 CGAL 编译代码时出现错误。我没有直接使用 Boost,我已经搜索并尝试了很多选项,比如-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDEDand -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION。我正在使用的版本是 CGAL 4.1.0、Qt 4.8.4_6 和 Boost 1.53.0_1,并在 Mac OS 10.8.2 机器中使用 CMake 生成 Makefile。关于可能导致该错误的任何想法?