首页 文章

如何使用Arr_conic_traits_2的曲线_2来近似代数段?

提问于
浏览
0

我正在计算两个线段( RatKernel::Segment_2 型)的平面平分线,它可以由抛物线弧,光线和线段组成 .

使用 Arr_conic_traits_2<RatKernel, AlgKernel, NtTraits> 类我可以很容易地创建抛物线弧的部分,这不是问题 . 如reference中所述,弧的支撑曲线必须具有以下形式: rx^2 + sy^2 + txy + ux + vy + w = 0 其中所有六个系数都需要是有理数 . 但是,弧的 endpoints 可以是带有代数坐标的 Point_2 .

问题出现在光线(无论如何必须被限制到非常长的区段,因为圆锥形特征类仅支持有界曲线)和区段,因为为了将它们连接到抛物线弧,它们还需要具有代数 endpoints . 这意味着支撑曲线(一条线)也会有代数系数,但这不受支持 .

我真的需要平分线的所有部分彼此连接,因为用合理的段来近似段部分(从而使平分线部分断开)似乎在其他计算中引起错误 .

一个想法是使用几乎平坦的曲线近似这些段平分线部分;问题是我只有两个 endpoints ,我可以在中间创建第三个点并稍微移动它(因此它可以很容易地具有有理坐标),这样通过这三个点的曲线就不会是平坦的 .
有三个点(两个强有力的代数)我需要创建一个满足它们并且具有合理系数的曲线 . 这可能吗?有更好的解决方案吗?

P.S . :使用另一个排列类如 Arr_algebraic_segment_traits_2 将允许我使用无界光线,但是如果我理解正确的话,所有曲线的 endpoints 都需要将x坐标作为整数,这甚至是一个更大的问题 .

1 回答

  • 0

    毕竟尝试使用 Arr_algebraic_segment_traits_2 . 由该特征处理的曲线是零个多项式集的图 . 限制是系数必须是整数,这意味着也可以处理具有有理系数的多项式 . 点的坐标是实数 .

    要构造实数并将其用作坐标,请执行以下操作:

    #include <CGAL/Algebraic_kernel_d_1.h>
    
    typedef CGAL::Algebraic_kernel_d_1<Integer>             AK;
    typedef AK::Polynomial_1                                Polynomial_1;
    
    AK ak;
    AK::Construct_algebraic_real_1 construct_algreal_1 =
      ak.construct_algebraic_real_1_object();
    Polynomial_1 px = CGAL::shift(AK::Polynomial_1(1),1);
    Algebraic_real_1 c = construct_algreal_1(px*px-2,1);
    Point_2 p = construct_point(c, c);
    

相关问题