CGAL中Extended_cartesian转Simple_cartesian的无损转换方法问询
从CGAL::Extended_cartesianCGAL::Gmpq无损转换到CGAL::Simple_cartesianCGAL::Gmpq
正向转换(Simple_cartesian → Extended_cartesian)的实现很直接,示例代码如下:
CGAL::Simple_cartesian<CGAL::Gmpq>::Point_3 p_s(1, 2, 3); CGAL::Extended_cartesian<CGAL::Gmpq>::Point_3 p_e(p_s.x(), p_s.y(), p_s.z());
对于反向转换,已知CGAL::Extended_cartesian<CGAL::Gmpq>的坐标类型是CGAL::Nef_polynomial<CGAL::Gmpq>,且该多项式表示有限有理数(即零次常数多项式),可以通过提取多项式的常数项实现无损转换,完全避免转为double的精度损失问题,示例代码如下:
// 假设已有Extended_cartesian内核下的点p_e CGAL::Simple_cartesian<CGAL::Gmpq>::Point_3 p_s( p_e.x().coefficient(0), p_e.y().coefficient(0), p_e.z().coefficient(0) );
关键说明
Nef_polynomial<CGAL::Gmpq>表示有限有理数时,本质是零次多项式,仅包含常数项- 调用
coefficient(0)可以直接获取对应的CGAL::Gmpq值,整个过程无精度损失,是完全无损的转换方式
内容的提问来源于stack exchange,提问作者user3677630
相关产品推荐
相关产品推荐

