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

## CGAL::intersection

#include <CGAL/intersections.h>

Object | intersection ( Type1<Kernel> obj1, Type2<Kernel> obj2)
|  | Two objects obj1 and obj2 intersect if there is a point p that is part of both obj1 and obj2. The intersection region of those two objects is defined as the set of all points p that are part of both obj1 and obj2. Note that for objects like triangles and polygons that enclose a bounded region, this region is considered part of the object. If a segment lies completely inside a triangle, then those two objects intersect and the intersection region is the complete segment.

The possible value for types Type1 and Type2 and the possible return values wrapped in Object are the following:

type A | type B | return type
--- | --- | ---
Line_2 | Line_2 |
Point_2
Line_2
Segment_2 | Line_2 |
Point_2
Segment_2
Segment_2 | Segment_2 |
Point_2
Segment_2
Ray_2 | Line_2 |
Point_2
Ray_2
Ray_2 | Segment_2 |
Point_2
Segment_2
Ray_2 | Ray_2 |
Point_2
Segment_2
Ray_2
Triangle_2 | Line_2 |
Point_2
Segment_2
Triangle_2 | Segment_2 |
Point_2
Segment_2
Triangle_2 | Ray_2 |
Point_2
Segment_2
Triangle_2 | Triangle_2 |
Point_2
Segment_2
Triangle_2
std::vector<Point_2>
Iso_rectangle_2 | Line_2 |
Point_2
Segment_2
Iso_rectangle_2 | Segment_2 |
Point_2
Segment_2
Iso_rectangle_2 | Ray_2 |
Point_2
Segment_2
Iso_rectangle_2 | Iso_rectangle_2 |
Iso_rectangle_2
Plane_3 | Line_3 |
Point_3
Line_3
Plane_3 | Ray_3 |
Point_3
Ray_3
Plane_3 | Segment_3 |
Point_3
Segment_3
Plane_3 | Plane_3 |
Line_3
Plane_3

There is also an intersection function between 3 planes.

Object |
intersection ( | Plane_3<Kernel> pl1, Plane_3<Kernel> pl2, Plane_3<Kernel> pl3)
|  | returns the intersection of 3 planes, which can be either a point, a line, a plane, or empty.

### Example

The following example demonstrates the most common use of intersection routines.

    #include <CGAL/intersections.h>

    void foo(CGAL::Segment_2<Kernel> seg, CGAL::Line_2<Kernel> line)
    {
        CGAL::Object result;
        CGAL::Point_2<Kernel> ipoint;
        CGAL::Segment_2<Kernel> iseg;

        result = CGAL::intersection(seg, line);
        if (CGAL::assign(ipoint, result)) {

            // handle the point intersection case.

        } else
            if (CGAL::assign(iseg, result)) {

                // handle the segment intersection case.

            } else {

                // handle the no intersection case.
            }
    }

### See Also

CGAL::assign
CGAL::do_intersect
CGAL::Object

Next: left_turn

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

The CGAL Project . Tue, December 21, 2004 .