Navigation: Up, Table of Contents, Bibliography, Index, Title Page

Introduction

This part of the reference manual covers the kernel. The kernel contains objects of constant size, such as point, vector, direction, line, ray, segment, triangle, iso-oriented rectangle and tetrahedron. With each type comes a set of functions which can be applied to an object of this type. You will typically find access functions (e.g. to the coordinates of a point), tests of the position of a point relative to the object, a function returning the bounding box, the length, or the area of an object, and so on. The CGAL kernel further contains basic operations such as affine transformations, detection and computation of intersections, and distance computations.

The correctness proof of nearly all geometric algorithms presented in theory papers assumes exact computation with real numbers. This leads to a fundamental problem with the implementation of geometric algorithms. Naively, often the exact real arithmetic is replaced by inexact floating-point arithmetic in the implementation. This often leads to acceptable results for many input data. However, even for the implementation of the simplest geometric algorithms this simplification occasionally does not work. Rounding errors introduced by an inaccurate arithmetic may lead to inconsistent decisions, causing unexpected failures for some correct input data. There are many approaches to this problem, one of them is to compute exactly (compute so accurate that all decisions made by the algorithm are exact) which is possible in many cases but more expensive than standard floating-point arithmetic. C. M. Hoffmann [Hof89a, Hof89b] illustrates some of the problems arising in the implementation of geometric algorithms and discusses some approaches to solve them. A more recent overview is given in [Sch97]. The exact computation paradigm is discussed by Yap and Dubé [YD95] and Yap [Yap97].

In CGAL you can choose the underlying number types and arithmetic. You can use different types of arithmetic simultaneously and the choice can be easily changed, e.g. for testing. So you can choose between implementations with fast but occasionally inexact arithmetic and implementations guaranteeing exact computation and exact results. Of course you have to pay for the exactness in terms of execution time and storage space.

CGAL and LEDA

LEDA is a Library of Efficient Data types and Algorithms under development at the Max-Planck Institut für Informatik, Saarbrücken, Germany. CGAL is partially based on LEDA. It makes a strong combination with the combinatorial part of it, and can be used independently[^2] as well.

Organization of this manual

This document is organized as follows. Chapter reference arrow explains the basic concepts. It is a more technical introduction and we recommend to read it before the rest of the manual. Chapter reference arrow introduces a number of notions used throughout the kernel. Chapters reference arrow through reference arrow cover the 2D kernel, chapters reference arrow through reference arrow cover the 3D kernel. Chapters reference arrow and reference arrow introduce the first dD functionality. More will be added in future releases.


Footnotes

  1. http://www.mpi-sb.mpg.de/LEDA/leda.html
  2. There are very few exceptions, e.g. 3D convex hull

Next chapter:
Preliminaries
Navigation: Up, Table of Contents, Bibliography, Index, Title Page
The CGAL Project. Wed, January 20, 1999.