Introduction to CGAL Constantinos Tsirogiannis TU / Eindhoven Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL ? CGAL = Computational Geometry Algorithms Library: Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL ? CGAL = Computational Geometry Algorithms Library: A library of Geometric algorithms and data structures. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL ? CGAL = Computational Geometry Algorithms Library: A library of Geometric algorithms and data structures. Written in C++ Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL ? CGAL = Computational Geometry Algorithms Library: A library of Geometric algorithms and data structures. Written in C++ Uses template programming Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
C++ C++ = C + Object Oriented Programming Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
C++ C++ = C + Object Oriented Programming Traditional C code: Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
C++ C++ = C + Object Oriented Programming Traditional C code: int a = 5; int b = 3; add function(a,b); Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
C++ C++ code: int a = 5; int b = 3; Example class foo; foo.add(a,b); Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
C++ Basics Here follow few basic concepts of C++ Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Classes/Structures Class: Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Classes/Structures Class: class Example class { public: int add( int a, int b) { return a + b; } ... private: int k; } ; Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Classes/ Structures (cont’d) Structures: same as classes, yet everything is by default visible (“public”) Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Namespaces Namespace: Can be seen as a “big bag” containing declarations of class types and functions. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Namespaces Namespace: Can be seen as a “big bag” containing declarations of class types and functions. Example: namespace FOO { class something { ... } ; class another class { ... } ; struct whatever { ... } ; int add(int a, int b) { a+b; } } Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Namespace std To access the type something from a namespace FOO try: FOO::something or typename FOO::something Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Namespace std To access the type something from a namespace FOO try: FOO::something or typename FOO::something Namespace std contains many helpfull classes and functions of the Standard Library of C++ . Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Containers Nice and easy classes to insert and manipulate sets of objects. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Containers Nice and easy classes to insert and manipulate sets of objects. Example: Vectors std::vector < int > integers; integers.push back(4); integers.push back(-2); integers.push back(9); integers.push back(3); for( int i = 0; i < integers.size(); i ++ ) std::cout << integers [ i ] << std::endl; Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Iterators An iterator is a substitute of a pointer. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Iterators An iterator is a substitute of a pointer. Iterators are used to go through the elements of a container or some other kind of range. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Iterators An iterator is a substitute of a pointer. Iterators are used to go through the elements of a container or some other kind of range. Example: std::vector < int > integers; integers.push back(4); integers.push back(-2); integers.push back(9); integers.push back(3); for( typename std::vector<int>::iterator it = integers.begin(); it < integers.end(); it ++ ) std::cout << *it << std::endl; Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Input from file In the beginning of your .cpp file put: # include < fstream > Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Input from file In the beginning of your .cpp file put: # include < fstream > To read a set of integers from a file: std::ifstream in(‘‘filename.txt’’); std::istream iterator < int > begin(in); std::istream iterator < int > end; std::vector < int > integers; integers.insert(integers.begin(),begin,end); Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Output to file Example: std::ofstream os("filename.cout"); std::vector < int > integers; integers.push back(4); integers.push back(-2); integers.push back(9); integers.push back(3); for( typename std::vector<int>::iterator it = integers.begin(); it < integers.end(); it ++ ) os << *it << std::endl; Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Template A template is a class or function that one can choose the types that it contains/manipulates. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Template A template is a class or function that one can choose the types that it contains/manipulates. Example: A function that computes a power of a given integer. int power (int base, int exponent) { int res=1; for( int i=1; i<=exponent; i++ ) res = res * base; return res; } Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Templates Example: A function that computes a power of a given object of type Type . template < class Type > Type power ( Type base, int exponent) { Type res=1; for( int i = 1; i < = exponent; i ++ ) res = res * base; return res; } Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL CGAL provides implementations of: Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL CGAL provides implementations of: Triangulations. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL CGAL provides implementations of: Triangulations. Voronoi diagrams. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL CGAL provides implementations of: Triangulations. Voronoi diagrams. Arrangements. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL CGAL provides implementations of: Triangulations. Voronoi diagrams. Arrangements. Kinetic Data Structures. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL CGAL provides implementations of: Triangulations. Voronoi diagrams. Arrangements. Kinetic Data Structures. . . . Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL Concepts The concepts provided by CGAL are categorized as: Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL Concepts The concepts provided by CGAL are categorized as: Geometric Objects Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL Concepts The concepts provided by CGAL are categorized as: Geometric Objects Geometric Predicates/Constructions Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
CGAL Concepts The concepts provided by CGAL are categorized as: Geometric Objects Geometric Predicates/Constructions Geometric Algorithms/Data-Structures Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Kernel Geometric objects and predicates appear inside a kernel. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Kernel Geometric objects and predicates appear inside a kernel. A kernel is more or less a large class the encapsulates objects and predicates that fall in the same general category. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Kernel Geometric objects and predicates appear inside a kernel. A kernel is more or less a large class the encapsulates objects and predicates that fall in the same general category. struct Cartesian kernel { class Point { ... } ; class Segment { ... } ; class Triangle { ... } ; ... class Do intersect predicate { ... } ; } ; Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Kernel A kernel is in fact a template. The template parameter is a number type. Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Kernel A kernel is in fact a template. The template parameter is a number type. template < typename Num type > struct Cartesian kernel { class Point < Num type > { ... } ; class Segment < Num type > { ... } ; class Triangle < Num type > { ... } ; ... class Do intersect pred < Num type > { ... } ; } ; Constantinos Tsirogiannis Introduction to CGAL Thursday, April 7, 2011
Recommend
More recommend