Cartesian_converter<K1, K2, NTConverter>converts objects from the kernel traits K1 to the kernel traits K2 using Converter to do the conversion. Those traits must be of the form Cartesian<FT1> and Cartesian<FT2> (or the equivalent with Simple_cartesian). It then provides the following operators to convert objects from K1 to K2.
The third template parameter NTConverter is a function object that must provide K2::FT operator()(K1::FT n) that converts n to an K2::FT which has the same value.
The default value of this parameter is CGAL::NT_converter<K1::FT, K2::FT>.
#include <CGAL/Cartesian_converter.h>
Cartesian_converter<K1, K2, NTConverter> conv; | |
Default constructor.
|
K2::Point_2 | conv.operator() ( K1::Point_2 p) | |
returns a K2::Point_2 which coordinates are those of p, converted by NTConverter. |
Similar operators are defined for the other kernel traits types Point_3, Vector_2...
In the following example, we compute exactly the intersection point between a line and a triangle, and we then create a double approximation of this point.
File: examples/Kernel_23/cartesian_converter.cpp
#include <CGAL/Simple_cartesian.h> #include <CGAL/Quotient.h> #include <CGAL/MP_Float.h> #include <CGAL/Cartesian_converter.h> typedef CGAL::Simple_cartesian<double> IK; typedef CGAL::Simple_cartesian<CGAL::Quotient<CGAL::MP_Float> > EK; typedef CGAL::Cartesian_converter<IK,EK> IK_to_EK; typedef CGAL::Cartesian_converter<EK,IK> EK_to_IK; int main(){ IK::Triangle_3 t1( IK::Point_3(0.,0.,0.), IK::Point_3(1.,0.,-1.), IK::Point_3(0.,1.,3.) ); IK::Line_3 l1( IK::Point_3(0.2,0.25,-7), IK::Point_3(0.25,0.3,4) ); IK_to_EK to_exact; EK::Triangle_3 t2=to_exact(t1); EK::Line_3 l2=to_exact(l1); CGAL::Object inter=CGAL::intersection(t2,l2); const EK::Point_3& exact_pt=CGAL::object_cast<EK::Point_3>(inter); EK_to_IK to_inexact; IK::Point_3 inexact_pt = to_inexact(exact_pt); return 0; }