【问题标题】:Is there a way to insert circle with algebraic coordinate into an arrangement?有没有办法将具有代数坐标的圆插入到排列中?
【发布时间】:2014-02-27 00:38:22
【问题描述】:

我正在研究一个运动规划问题,但我遇到了数值精度问题。

我的目标是用线段和圆弧划分实数的二维向量空间。 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;

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

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

谢谢。

【问题讨论】:

    标签: geometry computational-geometry cgal motion-planning


    【解决方案1】:

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

    【讨论】:

    • 我使用CGAL::Arr_conic_traits_2而不是CGAL::Arr_circle_segment_traits_2的原因是平面的细分是基于一个插入多边形,类型为CGAL::Gps_traits_2&lt;Conic_traits_2&gt;::Polygon_2。那么改变程序使用的traits类也不是解决办法。
    • 好吧,为什么不使用 CGAL::Gps_traits_2<:arr_circle_segment_traits_2>::Polygon_2?特征决定了数字类型。它是一个目的、一个理由和一个目标……
    • Gps_traits_2&lt;Arr_circle_segment_traits_2&gt;::Polygon_2 的使用需要从Gps_traits_2&lt;Arr_conic_traits_2&gt;::Polygon_2 转换(即插入的类型结果)。这是可能的,但是我对实数二维空间的划分不是一般多边形,而是一组可能共享一些共同边的一般多边形。这就是为什么Gps_traits_2&lt;Arr_circle_segment_traits_2&gt;::Polygon_2 级别太高,那么我可以使用底层类型Arrangement_2&lt;Arr_circle_segment_traits_2&gt; 但这不允许我处理代数坐标的圆。
    • 让我们先退一步。您是否考虑过使用 CGAL::Gps_circle_segment_traits_2 来计算插图?如果这是一个选项,请查看我们书中的 ex_approx_offset.cpp 示例,即 CGAL Arrangements and their Applications。在第9章中列出,代码可以从我们的网页acg.cs.tau.ac.il/cgal-arrangement-book/…获得
    • 是的,我考虑过使用approximated_inset_2 函数(参见2D Minkowski Sums)。但是,由于某些原因,我需要插入两个弧之间的角度小于 180°(在其内部)。不幸的是,近似值没有给我这个属性。
    【解决方案2】:

    据我所知,据我所知the section of the CGAL manual about it,没有特征类来处理具有代数坐标的圆弧。

    (我会将您的问题转发给 CGAL 开发人员以确定。我会在了解更多信息后编辑我的答案。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-04
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多