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