\( \newcommand{\E}{\mathrm{E}} \) \( \newcommand{\A}{\mathrm{A}} \) \( \newcommand{\R}{\mathrm{R}} \) \( \newcommand{\N}{\mathrm{N}} \) \( \newcommand{\Q}{\mathrm{Q}} \) \( \newcommand{\Z}{\mathrm{Z}} \) \( \def\ccSum #1#2#3{ \sum_{#1}^{#2}{#3} } \def\ccProd #1#2#3{ \sum_{#1}^{#2}{#3} }\)
CGAL 4.14.2 - 2D and 3D Linear Geometry Kernel
CGAL::Cartesian_converter< K1, K2, NTConverter > Class Template Reference

#include <CGAL/Cartesian_converter.h>

Definition

Cartesian_converter converts objects from the kernel traits K1 to the kernel traits K2 using NTConverter 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>.

Example

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 Kernel_23/cartesian_converter.cpp

#include <CGAL/Simple_cartesian.h>
#include <CGAL/Quotient.h>
#include <CGAL/MP_Float.h>
#include <CGAL/Cartesian_converter.h>
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);
inter = CGAL::intersection(t2,l2);
// As we are sure that there IS an intersection
// and that the intersection IS a point
// we do not have to check for this, or put it in a try/catch
const EK::Point_3& exact_pt = boost::get<EK::Point_3>(*inter);
EK_to_IK to_inexact;
IK::Point_3 inexact_pt = to_inexact(exact_pt);
std::cout << inexact_pt << std::endl;
return 0;
}
See also
CGAL::Cartesian<FieldNumberType>
CGAL::Simple_cartesian<FieldNumberType>
Examples:
Filtered_kernel/Filtered_predicate.cpp, and Kernel_23/cartesian_converter.cpp.

Creation

 Cartesian_converter ()
 Default constructor.
 

Operations

Similar operators are defined for the other kernel traits types Point_3, Vector_2...

K2::Point_2 operator() (const K1::Point_2 &p)
 returns a K2::Point_2 which coordinates are those of p, converted by NTConverter.