将内核中的对象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());
我的问题是怎么倒着做,好像不能像上面那样做,假设我知道Extended_cartesian
核数类型表示的数是有限有理数,我检查FT类型后,看起来类型是CGAL::Nef_polynomial<CGAL::Gmpq>
。我如何正确地将它转换回标准类型,在这种情况下是CGAL::Gmpq
?我想找到一个无损的转换。换句话说,将其转换为double
,然后转换为CGAL::Gmpq
是次优的。
1条答案
按热度按时间luaexgnf1#
扩展内核仅用于Nef多边形和多面体来表示非有限对象(像射线)。在这种情况下,所有的坐标都变成 * 扩展 *,并且这种扩展是使用
CGAL::Nef_polynomial
类型实现的。看起来这种类型的对象是由系数数组表示的。如果你使用规则点(在CGAL * 标准 * 点中调用),那么它们的坐标将由这些数组的第一个元素表示-因此,解决方案:上面的方法可能不是CGAL开发人员计划的。实际上,我查看了
Extended_cartesian.h
头文件,发现了一个函数standard_point
,它返回了你想要的(但仅针对2D中的点):因此,上面的解决方案与此功能类似。