我正在研究运动规划问题,我遇到了数字精度方面的问题。
我的目标是将实数的二维向量空间除以段和圆弧。为此目的,2D Arrangement of the CGAL library已得到很好的指示。以下是我定义的类型:
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;
在计算过程中,我需要移动一个端点具有有理坐标的分段(由于分段的长度,即平方根),该分段的图像则具有代数坐标。我还需要在此图像的端点添加两个圆弧。
我在手册中找到的一种方法是为中心添加合理坐标的圆弧,如何处理代数坐标(没有精度误差)?
感谢。
答案 0 :(得分:3)
使用线性段和使用CGAL排列的圆弧细分平面的最有效方法是使用CGAL::Arr_circle_segment_traits_2
特征。正如手册所说,它应该用一个合理的内核(一个用精确有理数类型定义的内核)来实例化。但是,traits类中嵌套的Point_2
类型与Kernel::Point_2
类型不同。它的坐标是CGAL::Sqrt_extension
的实例。这种特殊数字类型比标准代数数字类型更有效。如果由于某种原因必须使用(标准)代数数字类型,则可以使用CGAL::Arr_algebraic_segment_traits_2
特征。后者支持任何一般的代数曲线。
答案 1 :(得分:1)
据我所知,据我所知the section of the CGAL manual about it,没有traits类来处理带代数坐标的圆弧。
(我会将您的问题转发给CGAL开发人员以确定。一旦我了解更多,我就会编辑我的答案。)