CGAL中的标尺和指南针构造



我正在尝试使用CGAL进行基本结构,例如"获取直线和圆的相交","连接两个点","创建圆"。但是,内核的选择似乎是一个问题。当我使用精确的 2D 圆形内核时,我从交叉点获得Circular_arc_point_2,然后我不能使用此数据类型来创建直线、圆;转换为Point_2似乎引入了错误,然后将近似值存储为确切的数字。此外,这个问题似乎与内核的选择无关。

这些结构的正确方法是什么?只要数据类型在这些构造中保持一致,精确和近似数字都可以。在最坏的情况下,如果这是无法解决的,是否有其他具有此功能的免费库?

预定义的Exact_circular_kernel_2仅使用有理数作为其字段类型。为了覆盖每个可构造的点,您应该定义一个使用 FieldWithSqrt 的循环内核。对于现有的类型和特征,这很简单:

using L = CGAL::Exact_predicates_exact_constructions_kernel_with_sqrt;
using A = CGAL::Algebraic_kernel_for_circles_2_2<L::FT>;
using K = CGAL::Circular_kernel_2<L, A>; 

然后,您可以使用确切的坐标将Circular_arc_point_2 p转换为Point_2

K::Point_2 q(p.x(), p.y());

Circular_arc_point_2是一个点,其坐标是 2 度的代数数(仅表示 2 个圆的交集(。例如,您可以使用Point_2(to_double(cp.x()), to_double(cp.y()))将点转换为常规浮点坐标Point_2,但这样您将失去准确性。

相关内容

  • 没有找到相关文章

最新更新