mirror of https://github.com/CGAL/cgal
338 lines
8.6 KiB
TeX
338 lines
8.6 KiB
TeX
\begin{ccRefFunction}{intersection}
|
|
\ccInclude{CGAL/intersections.h}
|
|
|
|
\ccUnchecked{
|
|
\ccFunction{Object intersection(Type1<Kernel> obj1, Type2<Kernel> obj2);}
|
|
{Two objects \ccStyle{obj1} and \ccStyle{obj2} intersect if there is a point
|
|
\ccStyle{p} that is part of both \ccStyle{obj1} and \ccStyle{obj2}.
|
|
The \ccHtmlNoLinksFrom{intersection} region of those two objects is defined as the set of all
|
|
points \ccStyle{p} that are part of both \ccStyle{obj1} and \ccStyle{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 \ccHtmlNoLinksFrom{intersection} region is the complete segment.
|
|
}}
|
|
|
|
The possible value for types \ccStyle{Type1} and \ccStyle{Type2} and the
|
|
possible return values wrapped in \ccc{Object} are the
|
|
following:
|
|
|
|
|
|
\begin{ccTexOnly}
|
|
\begin{longtable}[c]{|l|l|l|}
|
|
%\caption{All available intersection computations}\\
|
|
\multicolumn{3}{l}{\sl \ \ }
|
|
\endfirsthead
|
|
\multicolumn{3}{l}{\sl continued}
|
|
\endhead
|
|
\hline
|
|
type A & type B & \parbox{4 cm}{\vspace{1 mm}{return type}} \\
|
|
\hline
|
|
\ccStyle{Line_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Line_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Segment_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Segment_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Ray_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Ray_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Ray_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Ray_2} & \ccStyle{Ray_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\\ \ccStyle{Ray_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Triangle_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Triangle_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Triangle_2} & \ccStyle{Ray_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Triangle_2} & \ccStyle{Triangle_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\\ \ccStyle{Triangle_2}
|
|
\\ \ccStyle{std::vector<Point_2>}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Iso_rectangle_2} & \ccStyle{Line_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Iso_rectangle_2} & \ccStyle{Segment_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Iso_rectangle_2} & \ccStyle{Ray_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_2}
|
|
\\ \ccStyle{Segment_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\ccStyle{Iso_rectangle_2} & \ccStyle{Iso_rectangle_2} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Iso_rectangle_2}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
{\ccStyle{Plane_3}} & {\ccStyle{Line_3}} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_3} \\
|
|
\ccStyle{Line_3}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
{\ccStyle{Plane_3}} & {\ccStyle{Ray_3}} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_3} \\
|
|
\ccStyle{Ray_3}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
{\ccStyle{Plane_3}} & {\ccStyle{Segment_3}} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Point_3} \\
|
|
\ccStyle{Segment_3}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
{\ccStyle{Plane_3}} & {\ccStyle{Plane_3}} & \parbox{4 cm}{\vspace{1 mm}
|
|
\ccStyle{Line_3} \\
|
|
\ccStyle{Plane_3}
|
|
\vspace{1 mm}} \\
|
|
\hline
|
|
\end{longtable}
|
|
\end{ccTexOnly}
|
|
|
|
\begin{ccHtmlOnly}
|
|
<DIV ALIGN="CENTER">
|
|
<TABLE CELLPADDING=3 BORDER="1">
|
|
<TR> <TH> type A </TH>
|
|
<TH> type B </TH>
|
|
<TH> return type </TH>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Line_2 </TD>
|
|
<TD VALIGN="CENTER" > Line_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Line_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Segment_2 </TD>
|
|
<TD VALIGN="CENTER" > Line_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Segment_2 </TD>
|
|
<TD VALIGN="CENTER" > Segment_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Ray_2 </TD>
|
|
<TD VALIGN="CENTER" > Line_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Ray_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Ray_2 </TD>
|
|
<TD VALIGN="CENTER" > Segment_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Ray_2 </TD>
|
|
<TD VALIGN="CENTER" > Ray_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
<TR><TD>Ray_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Triangle_2 </TD>
|
|
<TD VALIGN="CENTER" > Line_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Triangle_2 </TD>
|
|
<TD VALIGN="CENTER" > Segment_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Triangle_2 </TD>
|
|
<TD VALIGN="CENTER" > Ray_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Triangle_2 </TD>
|
|
<TD VALIGN="CENTER" > Triangle_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
<TR><TD>Triangle_2</TD></TR>
|
|
<TR><TD>std::vector<Point_2></TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Iso_rectangle_2 </TD>
|
|
<TD VALIGN="CENTER" > Line_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Iso_rectangle_2 </TD>
|
|
<TD VALIGN="CENTER" > Segment_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Iso_rectangle_2 </TD>
|
|
<TD VALIGN="CENTER" > Ray_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_2</TD></TR>
|
|
<TR><TD>Segment_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Iso_rectangle_2 </TD>
|
|
<TD VALIGN="CENTER" > Iso_rectangle_2 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Iso_rectangle_2</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Plane_3 </TD>
|
|
<TD VALIGN="CENTER" > Line_3 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_3</TD></TR>
|
|
<TR><TD>Line_3</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Plane_3 </TD>
|
|
<TD VALIGN="CENTER" > Ray_3 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_3</TD></TR>
|
|
<TR><TD>Ray_3</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Plane_3 </TD>
|
|
<TD VALIGN="CENTER" > Segment_3 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Point_3</TD></TR>
|
|
<TR><TD>Segment_3</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
<TR>
|
|
<TD VALIGN="CENTER" > Plane_3 </TD>
|
|
<TD VALIGN="CENTER" > Plane_3 </TD>
|
|
<TD><TABLE>
|
|
<TR><TD>Line_3</TD></TR>
|
|
<TR><TD>Plane_3</TD></TR>
|
|
</TABLE></TD>
|
|
</TR>
|
|
</TABLE>
|
|
</DIV>
|
|
\end{ccHtmlOnly}
|
|
|
|
There is also an intersection function between 3 planes.
|
|
|
|
\ccFunction{Object intersection(const Plane_3<Kernel>& pl1,
|
|
const Plane_3<Kernel>& pl2,
|
|
const Plane_3<Kernel>& pl3);}
|
|
{returns the intersection of 3 planes, which can be either a point, a line,
|
|
a plane, or empty.}
|
|
|
|
\ccExample
|
|
|
|
The following example demonstrates the most common use of
|
|
\ccc{intersection} routines.
|
|
\begin{verbatim}
|
|
#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)) {
|
|
\end{verbatim}%
|
|
\ccHtmlLinksOff%
|
|
\begin{verbatim}
|
|
// handle the point intersection case.
|
|
\end{verbatim}%
|
|
\ccHtmlLinksOn%
|
|
\begin{verbatim}
|
|
} else
|
|
if (CGAL::assign(iseg, result)) {
|
|
\end{verbatim}%
|
|
\ccHtmlLinksOff%
|
|
\begin{verbatim}
|
|
// handle the segment intersection case.
|
|
\end{verbatim}%
|
|
\ccHtmlLinksOn%
|
|
\begin{verbatim}
|
|
} else {
|
|
\end{verbatim}%
|
|
\ccHtmlLinksOff%
|
|
\begin{verbatim}
|
|
// handle the no intersection case.
|
|
}
|
|
}
|
|
\end{verbatim}%
|
|
\ccHtmlLinksOn%
|
|
|
|
\ccSeeAlso
|
|
\ccRefIdfierPage{CGAL::assign} \\
|
|
\ccRefIdfierPage{CGAL::do_intersect} \\
|
|
\ccRefIdfierPage{CGAL::Object} \\
|
|
|
|
\end{ccRefFunction}
|