1

我正在研究一个运动规划问题,我面临着数值精度的问题。

我的目标是用线段和圆弧划分实数的二维向量空间。CGAL 库的2D 排列很好地用于此目的。以下是我定义的类型:

typedef CGAL::CORE_algebraic_number_traits Nt_traits;
typedef Nt_traits::Rational Rational;
typedef Nt_traits::Algebraic Algebraic;
typedef CGAL::Cartesian<Rational> Rat_kernel;
typedef CGAL::Cartesian<Algebraic> Alg_kernel;
typedef CGAL::Arr_conic_traits_2<Rat_kernel, Alg_kernel, Nt_traits> Conic_traits_2;
typedef CGAL::Arrangement_2<Conic_traits_2> Arrangement_2;

在计算过程中,我需要移动一个端点具有有理坐标的线段,(由于线段的长度,即平方根),该线段的图像然后具有代数坐标。我还需要在此图像的端点上添加两个圆弧。

我在手册中发现的只是一种为中心添加有理坐标的圆弧的方法,如何处理具有代数坐标的圆弧(没有精度误差)?

谢谢。

4

2 回答 2

3

利用 CGAL 排列用直线段和圆弧细分平面的最有效方法是使用CGAL::Arr_circle_segment_traits_2特征。正如手册所说,它应该使用有理内核(使用精确有理数类型定义的内核)来实例化。但是,Point_2嵌套在特征类中的类型与Kernel::Point_2类型不同。它的坐标是 的实例化CGAL::Sqrt_extension。这种特殊数字类型比标准代数数字类型更有效。如果出于某种原因必须使用(标准)代数类型,则可以使用CGAL::Arr_algebraic_segment_traits_2特征。后者支持任何一般代数曲线。

于 2014-02-27T12:55:30.233 回答
1

据我所知,并且据我了解CGAL 手册中关于它的部分,没有特征类来处理具有代数坐标的圆弧。

(我会将您的问题转发给 CGAL 开发人员以确保。一旦我知道更多,我将编辑我的答案。)

于 2014-02-27T12:14:05.627 回答