computational-geometry 相关问题

是计算机科学的一个分支,致力于算法的研究,可以用几何学来陈述。

有金字塔束-AABB相交算法吗?

我正在尝试找出一种方法来检查轴对齐边界框(AABB)是否与金字塔梁相交。是否有已知的算法?有谁知道如何

回答 1 投票 0

CGAL 排列从半边检索原始片段(以自然的方式)

我有这个代码片段,它只计算一些边的排列: #包括 #包括 #包括 我有这个代码片段,它只计算一些边的排列。: #include <iostream> #include <CGAL/Exact_predicates_exact_constructions_kernel.h> #include <CGAL/Arr_segment_traits_2.h> #include <CGAL/Arrangement_2.h> typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel; typedef CGAL::Arr_segment_traits_2<Kernel> Traits_2; // Traits for segments typedef Traits_2::Segment_2 Segment_2; typedef CGAL::Arrangement_2<Traits_2> Arrangement_2; int main() { Arrangement_2 arrangement; std::vector<Segment_2> segments = { Segment_2(Kernel::Point_2(0.5, 0), Kernel::Point_2(2, 2)), Segment_2(Kernel::Point_2(0, 1.5), Kernel::Point_2(2, 1)), Segment_2(Kernel::Point_2(1, 0), Kernel::Point_2(1, 2)), Segment_2(Kernel::Point_2(0, 2), Kernel::Point_2(2, 0)), Segment_2(Kernel::Point_2(0, 1.5), Kernel::Point_2(2, 2)) }; CGAL::insert(arrangement, segments.begin(), segments.end()); std::cout << "Vertices:" << std::endl; for (auto vit = arrangement.vertices_begin(); vit != arrangement.vertices_end(); ++vit) { std::cout << "(" << vit->point() << ")" << std::endl; } return 0; } 现在在一个项目中,我需要这样的功能,我可以派生出原始段,其中半边是其子段,例如,在示例中我有半边 e,现在想知道它是一个子段-GH 段: 有没有办法在 CGAL 中做到这一点?这似乎是一个自然的功能,但我在任何地方都找不到它。 是的,您可以使用Arrangement_with_history_2,正如@EfiFogel建议的那样。但是,在您的情况下,有一种简单的方法可以使用函数 CGAL::intersection 来完成您想要的操作。因此,对于每个排列边,您在原始段向量中查找一个段,其中包含该边。请参阅下面的代码: #include <iostream> #include <vector> #include <CGAL/Exact_predicates_exact_constructions_kernel.h> #include <CGAL/Arr_segment_traits_2.h> #include <CGAL/Arrangement_2.h> using Kernel = CGAL::Exact_predicates_exact_constructions_kernel; using Traits = CGAL::Arr_segment_traits_2<Kernel>; using Point = Traits::Point_2; using Segment = Traits::Segment_2; using Arrangement = CGAL::Arrangement_2<Traits>; using SVec = std::vector<Segment>; // ------ return true if the segment S contains the point P bool contains(Segment const& S, Point const& P) { return CGAL::intersection(S, P).has_value(); } // ------ return true if the segment S1 contains the segment S2 bool contains(Segment const& S1, Segment const& S2) { return contains(S1, S2.source()) && contains(S1, S2.target()); } // ------ return index of segment in the vector V, containing the segment S int find(SVec const& V, Segment const& S) { int res = -1; for (auto i = 0U; i < V.size(); ++i) { if (contains(V[i], S)) { res = i; break; } } return res; } int main() { Arrangement arrangement; SVec const segments = { {{0.5, 0 }, {2, 2}}, {{0 , 1.5}, {2, 1}}, {{1 , 0 }, {1, 2}}, {{0 , 2 }, {2, 0}}, {{0 , 1.5}, {2, 2}} }; CGAL::insert(arrangement, segments.begin(), segments.end()); std::cout << "Edges and Original Segments:" << std::endl; for (auto const& e: arrangement.edge_handles()) { Segment const s{e->source()->point(), e->target()->point()}; std::cout << '(' << s << ") in (" << segments[find(segments, s)] << ')' << std::endl; } } 如果性能是一个问题,您可以(例如)将原始片段存储在 std::multiset<Segment> 中(而不是向量),按角度排序。

回答 1 投票 0

纳尔代数的 SVD 分解表现得很奇怪

我正在尝试计算矩阵的 SVD,作为一个玩具示例,我使用了向量。 我运行了我的代码: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=

回答 2 投票 0

如何判断四条直线是否构成一个四边形,是凸四边形还是凹四边形?

在c++中,如何检测任意给定的四条线是否构成一个四边形,是凸的还是凹的,以及它们是否构成多个四边形? 例如,这样: 有这样一个: 还有这个:...

回答 1 投票 0

3D洞穴生成

我需要将两个不同尺寸的多边形连接成一个部分。这些多边形可以位于彼此不同的平面中。多边形也可以是凸多边形或非凸多边形。我需要一个算法...

回答 1 投票 0

如何扩展多边形直到其中一个边界到达一点

我有扩展多边形的代码,它的工作原理是将 xs 和 ys 乘以一个因子,然后将所得多边形重新居中于原始多边形的中心。 我还有代码来查找

回答 3 投票 0

如何检索两个 3D 向量之间的角度?

我是Python新手。 我在 3d 空间中有两个向量,我想知道两个向量之间的角度 我试过: vec1=[x1,y1,z1] vec2=[x2,y2,z2] 角度=np.arccos(np.dot(vec1,vec2)/(np.linalg.norm(vec1)*np....

回答 5 投票 0

2D 平面上的多边形:计算精确的位移以解决重叠问题

我正在 2D 平面上处理具有俄罗斯方块式重力的多边形。每个多边形可以位于 X 轴上或位于另一个多边形的顶部。如果一个多边形与任何其他多边形重叠,它...

回答 1 投票 0

OpenCV 椭圆与直线的交点

我试图找到椭圆与直线的交点。 我从图像中提取椭圆,并从 fitEllipse 获取 RotatedRect。现在我画了几条线,它们(理想情况下)

回答 1 投票 0

直接从 OFF 文件构建 `Nef_polyhedron_3` 和从同一文件构建的 `Polyhedron_3` 构建之间的行为差异

在CGAL中,可以通过加载OFF文件直接构建Nef_polyhedron_3,或者通过加载相同的OFF文件构建Polyhedron_3,然后从中构建Nef_polyhedron_3。 一个小考试...

回答 1 投票 0

如何从单元格中心坐标找到网格大小

我有一个八叉树计算网格,如附图所示。 蓝色网格是边长为1的立方体,红色网格边长为0.5,绿色网格边长为o...

回答 1 投票 0

SVG 路径上的 Catmull-Rom 插值

我们正在尝试使用 SVG 路径创建高性能、美观的铅笔工具。 我们记录鼠标坐标来绘制路径。获得高保真路径(精确到用户的移动...

回答 3 投票 0

alpha-wrap 可以并行运行吗?

我正在研究使用 alpha 包裹来生成某些 CAD 模型的表面网格。 alpha-wrap 可以并行使用吗? 对于 CGAL,我是一个初学者。我已经使用 alpha-wrap 来生成...

回答 1 投票 0

我可以使用什么算法来检查一个多边形是否适合另一个多边形?

我正在尝试编写一个程序,其中有一个“主”多边形,并且我想检查其他多边形是否可以放入其中。 这些多边形具有任意形状/大小,通常是凸的,并且

回答 1 投票 0

计算 2d 中的最小面积凸 k 边形

我正在尝试解决以下问题:给定一组点 P 和值 k,找到由 P 的点 S 的子集定义的最小凸 k 边形的面积,其中 |P| = n 和 |S| = k。 我发现...

回答 1 投票 0

关于布尔运算的区别

我面临着关于差异布尔运算(多边形A /多边形B)的问题。当多边形不简单时,CGAL::difference() 函数会崩溃。看看我遇到的一个问题的例子......

回答 1 投票 0

图形LASSO中算法解法与MATLAB CVX解法的区别?

图形最小绝对收缩和选择算子,由 Jerome Friedman、Trevor Hastie 和 Robert Tibshirani 引入(“使用图形的稀疏逆协方差估计...

回答 1 投票 0

计算多个多边形的平均值

我想“平均”几个具有实质性交集的多边形,例如这三个: 最好使用 Python 库,例如身材匀称。我在那里没有看到合适的功能,wh...

回答 1 投票 0

生成三维 Voronoi 图

Voronoi 图是一种将介质划分为 2D 多边形和 3D 多面体的曲面细分。 虽然构建 Voronoi 图的算法有很多,但其中一些算法很快速......

回答 1 投票 0

如何找到可以包围多边形的最小圆? [已关闭]

如何找到可以包围多边形的最小圆? 多边形被定义为映射 2D 平面内顶点的一组坐标。 这被称为最小圆问题。

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.