CGAL中的标尺和指南针构造

时间:2018-02-02 04:16:02

标签: geometry computational-geometry cgal

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

这些建筑的正确方法是什么?只要数据类型在这些结构中是一致的,精确数和近似数都是正确的。 在最坏的情况下,如果这是不可解析的,是否还有其他任何具有此功能的免费库?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

预定义的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 pPoint_2

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