414f72bea3
[SVN r83804]
785 lines
37 KiB
HTML
785 lines
37 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
|
||
xmlns:v="urn:schemas-microsoft-com:vml"
|
||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||
xmlns:(null)1="http://www.w3.org/TR/REC-html40" lang="en">
|
||
<head>
|
||
<!--
|
||
Copyright 2009-2010 Intel Corporation
|
||
license banner
|
||
-->
|
||
<title>Boost Polygon Library: Segment Concept</title>
|
||
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" />
|
||
<!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> -->
|
||
</head>
|
||
<body>
|
||
<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0"
|
||
cellpadding="0" cellspacing="0">
|
||
<tbody>
|
||
<tr>
|
||
<td style="background-color: rgb(238, 238, 238);" nowrap="1"
|
||
valign="top">
|
||
<div style="padding: 5px;" align="center"> <img
|
||
src="images/boost.png" border="0" height="86" width="277" /><a
|
||
title="www.boost.org home page" href="http://www.boost.org/"
|
||
tabindex="2" style="border: medium none ;"> </a> </div>
|
||
<div style="margin: 5px;">
|
||
<h3 class="navbar">Contents</h3>
|
||
<ul>
|
||
<li><a href="index.htm">Boost.Polygon Main Page</a></li>
|
||
<li><a href="gtl_design_overview.htm">Design Overview</a></li>
|
||
<li><a href="gtl_isotropy.htm">Isotropy</a></li>
|
||
<li><a href="gtl_coordinate_concept.htm">Coordinate Concept</a></li>
|
||
<li><a href="gtl_interval_concept.htm">Interval Concept</a></li>
|
||
<li><a href="gtl_point_concept.htm">Point Concept</a><br />
|
||
</li>
|
||
<li>Segment Concept</li>
|
||
<li><a href="gtl_rectangle_concept.htm">Rectangle Concept</a></li>
|
||
<li><a href="gtl_polygon_90_concept.htm">Polygon 90 Concept</a></li>
|
||
<li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
|
||
With Holes Concept</a></li>
|
||
<li><a href="gtl_polygon_45_concept.htm">Polygon 45 Concept</a></li>
|
||
<li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
|
||
With Holes Concept</a></li>
|
||
<li><a href="gtl_polygon_concept.htm">Polygon Concept</a></li>
|
||
<li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
|
||
Holes Concept</a></li>
|
||
<li><a href="gtl_polygon_90_set_concept.htm">Polygon 90 Set
|
||
Concept</a></li>
|
||
<li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
|
||
Concept</a></li>
|
||
<li><a href="gtl_polygon_set_concept.htm">Polygon Set Concept</a></li>
|
||
<li><a href="gtl_connectivity_extraction_90.htm">Connectivity
|
||
Extraction 90</a></li>
|
||
<li><a href="gtl_connectivity_extraction_45.htm">Connectivity
|
||
Extraction 45</a></li>
|
||
<li><a href="gtl_connectivity_extraction.htm">Connectivity
|
||
Extraction</a></li>
|
||
<li><a href="gtl_property_merge_90.htm">Property Merge 90</a></li>
|
||
<li><a href="gtl_property_merge_45.htm">Property Merge 45</a></li>
|
||
<li><a href="gtl_property_merge.htm">Property Merge</a></li>
|
||
<li><a href="voronoi_main.htm">Voronoi Main Page<br />
|
||
</a></li>
|
||
<li><a href="voronoi_benchmark.htm">Voronoi Benchmark</a><br />
|
||
</li>
|
||
<li><a href="voronoi_builder.htm">Voronoi Builder</a></li>
|
||
<li><a href="voronoi_diagram.htm">Voronoi Diagram</a></li>
|
||
</ul>
|
||
<h3 class="navbar">Other Resources</h3>
|
||
<ul>
|
||
<li><a href="GTL_boostcon2009.pdf">GTL Boostcon 2009 Paper</a></li>
|
||
<li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
|
||
Presentation</a></li>
|
||
<li><a href="analysis.htm">Performance Analysis</a></li>
|
||
<li><a href="gtl_tutorial.htm">Layout Versus Schematic Tutorial</a></li>
|
||
<li><a href="gtl_minkowski_tutorial.htm">Minkowski Sum Tutorial</a></li>
|
||
<li><a href="voronoi_basic_tutorial.htm">Voronoi Basic Tutorial</a></li>
|
||
<li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
|
||
Tutorial</a></li>
|
||
</ul>
|
||
</div>
|
||
<h3 class="navbar">Polygon Sponsor</h3>
|
||
<div style="padding: 5px;" align="center"> <img
|
||
src="images/intlogo.gif" border="0" height="51" width="127" /><a
|
||
title="www.adobe.com home page" href="http://www.adobe.com/"
|
||
tabindex="2" style="border: medium none ;"> </a> </div>
|
||
</td>
|
||
<td
|
||
style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
|
||
valign="top" width="100%"><!-- End Header --><br />
|
||
<p> </p>
|
||
<h1>Segment Concept</h1>
|
||
<p> </p>
|
||
<p> The segment concept tag is <font face="Courier New">segment_concept</font></p>
|
||
<p> To register a user defined type as a model of the segment
|
||
concept, specialize the geometry concept meta-function for that
|
||
type. In the example below CSegment is registered as a model of
|
||
the segment concept.</p>
|
||
<p style="font-family: Courier New,Courier,monospace;"> template
|
||
<><br />
|
||
struct geometry_concept<CSegment>
|
||
{ typedef segment_concept type; };</p>
|
||
<p> The semantic of a segment is
|
||
that it has a low and high point. A
|
||
std::pair<Point, Point>,
|
||
boost::tuple<Point, Point> or boost::array<Point, 2> could
|
||
all be made models of
|
||
segment by simply providing indirect access to their elements through
|
||
traits, however, these objects cannot be made a model of both segment
|
||
and rectangle in the same compilation unit, for obvious reason that
|
||
duplicate specialization of the geometry_concept struct is illegal, but
|
||
also because it would make overloading generic function by concept
|
||
ambiguous if a type modeled more than one concept.</p>
|
||
<p> Below is shown the default
|
||
segment traits. Specialization of these traits is required for
|
||
types that don't conform to the default behavior.</p>
|
||
<p><span style="font-family: Courier New,Courier,monospace;"><span
|
||
style="font-family: Courier New,Courier,monospace;">template
|
||
<typename Segment></span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">struct
|
||
segment_traits {</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">
|
||
typedef typename Segment::coordinate_type coordinate_type;</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">
|
||
typedef typename Segment::point_type point_type;</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<br style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">
|
||
static inline point_type get(const Segment& segment, direction_1d
|
||
dir) {</span><br style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">
|
||
return segment.get(dir);</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;"> }</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">};</span><br />
|
||
<br />
|
||
<span style="font-family: Courier New,Courier,monospace;">template
|
||
<typename Segment><br />
|
||
struct segment_mutable_traits {<br />
|
||
</span></span><span
|
||
style="font-family: Courier New,Courier,monospace;"><span
|
||
style="font-family: Courier New,Courier,monospace;">typedef typename
|
||
segment_traits<Segment>::coordinate_type </span></span><span
|
||
style="font-family: Courier New,Courier,monospace;"><span
|
||
style="font-family: Courier New,Courier,monospace;">coordinate_type;</span></span><br />
|
||
<span style="font-family: Courier New,Courier,monospace;"><span
|
||
style="font-family: Courier New,Courier,monospace;"> typedef
|
||
typename segment_traits<Segment>::point_type point_type;<br />
|
||
<br />
|
||
static inline void set(Segment& segment, direction_1d dir,
|
||
const point_type& point) {<br />
|
||
segment.set(dir, p);<br />
|
||
}<br />
|
||
<br />
|
||
static inline Segment construct(const point_type& low, const
|
||
point_type& high) {<br />
|
||
return Segment(low, high);<br />
|
||
}<br />
|
||
};</span></span></p>
|
||
<h2>Functions</h2>
|
||
<table style="width: 100%;" id="table1" border="1">
|
||
<tbody>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename Segment><br />
|
||
point_type <b>get</b>(const Segment& segment, direction_1d dir)</font></td>
|
||
<td>Returns the low or high endpoint of an object that
|
||
models segment, depending on
|
||
the direction_1d value.<font face="Courier New"> </font></td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename </font><font face="Courier New">Segment</font><font
|
||
face="Courier New">, typename Point><br />
|
||
void <b>set</b>(</font><font face="Courier New">Segment</font><font
|
||
face="Courier New">& segment, direction_1d dir,<br />
|
||
const Point& </font><span
|
||
style="font-family: Courier New;">point</span><font face="Courier New">)</font></td>
|
||
<td>Sets
|
||
the low or high endpoint of an object that models segment to an object
|
||
that models point, depending on the direction_1d value.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename Segment, typename Point1, typename Point2><br />
|
||
Segment<b> construct</b>(const Point1& low, const Point2& high)</font></td>
|
||
<td>Constructs an object that is a model of segment given
|
||
the two objects that are models of point.</td>
|
||
</tr>
|
||
<tr>
|
||
<td><font face="Courier New">template <typename
|
||
Segment1, typename </font><font face="Courier New">Segment2</font><font
|
||
face="Courier New">><br />
|
||
</font><font face="Courier New">Segment1</font><font
|
||
face="Courier New"> <span style="font-weight: bold;">copy_construct</span>(const
|
||
</font><font face="Courier New">Segment2</font><font
|
||
face="Courier New">& segment)</font></td>
|
||
<td style="text-align: left;">Copy constructs an object
|
||
that models segment given another segment.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename </font><font face="Courier New">Segment1</font><font
|
||
face="Courier New">, typename </font><font face="Courier New">Segment2></font><br />
|
||
<font face="Courier New">Segment1</font><font
|
||
face="Courier New">& <b>assign</b>(</font><font face="Courier New">Segment1</font><font
|
||
face="Courier New">& segment1,<br />
|
||
|
||
const </font><font face="Courier New">Segment2</font><font
|
||
face="Courier New">& segment2)</font></td>
|
||
<td>Copies data from the second object that models segment
|
||
into
|
||
the first object that models segment.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename </font><font face="Courier New">Segment1</font><font
|
||
face="Courier New">, typename </font><font face="Courier New">Segment1</font><font
|
||
face="Courier New">><br />
|
||
bool <b>equivalence</b>(const </font><font face="Courier New">Segment1</font><font
|
||
face="Courier New">& segment1,<br />
|
||
|
||
const </font><font face="Courier New">Segment1</font><font
|
||
face="Courier New">& segment2)</font></td>
|
||
<td>Given two objects that model segment, compares and
|
||
returns true if their low and high values are respectively equal.</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span
|
||
style="font-family: Courier New,Courier,monospace;">template
|
||
<typename Segment, typename Point></span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">int
|
||
<b>orientation</b></span><span
|
||
style="font-family: Courier New,Courier,monospace;">(const </span><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><span
|
||
style="font-family: Courier New,Courier,monospace;">& segment,</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">
|
||
const Point& point)</span><br />
|
||
</td>
|
||
<td>Implements
|
||
a robust orientation test of two objects that model segment and point.
|
||
Returns 0, if the point is collinear to the segment.<br />
|
||
Returns 1, if the point lies to the left of the segment.<br />
|
||
Returns -1, if the point lies to the right of the segment.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span
|
||
style="font-family: Courier New,Courier,monospace;">template
|
||
<typename Segment1, typename Segment2></span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">int
|
||
<b>orientation</b></span><span
|
||
style="font-family: Courier New,Courier,monospace;">(const </span><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment1</span><span
|
||
style="font-family: Courier New,Courier,monospace;">& segment1,</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">
|
||
const Segment2& segment2)</span></td>
|
||
<td>Implements a robust orientation test of two objects
|
||
that model segment. Note: segments are treated as math.
|
||
vectors.<br />
|
||
Returns 0, if segments are collinear.<br />
|
||
Returns 1, if the second segment is CCW oriented to the first segment.<br />
|
||
Returns -1, if the second segment is CW oriented to the first segment.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span
|
||
style="font-family: Courier New,Courier,monospace;">template
|
||
<typename </span><font face="Courier New">Segment, typename Point</font><span
|
||
style="font-family: Courier New,Courier,monospace;">></span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">bool
|
||
</span><span
|
||
style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span
|
||
style="font-family: Courier New,Courier,monospace;">(const </span><font
|
||
face="Courier New">Segment</font><span
|
||
style="font-family: Courier New,Courier,monospace;">& segment,</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">
|
||
const Point& value,</span><span
|
||
style="font-family: Courier New,Courier,monospace;"> bool
|
||
consider_touch)</span><br />
|
||
</td>
|
||
<td>Returns true if an object that models segment contains
|
||
an object that models point, else false.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span
|
||
style="font-family: Courier New,Courier,monospace;">template
|
||
<typename Segment1, typename Segment2></span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">bool
|
||
</span><span
|
||
style="font-weight: bold; font-family: Courier New,Courier,monospace;">contains</span><span
|
||
style="font-family: Courier New,Courier,monospace;">(const </span><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment1</span><span
|
||
style="font-family: Courier New,Courier,monospace;">& segment1,</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">
|
||
const </span><span style="font-family: Courier New,Courier,monospace;">Segment</span><span
|
||
style="font-family: Courier New,Courier,monospace;">2& segment2,</span>
|
||
<span style="font-family: Courier New,Courier,monospace;">bool
|
||
consider_touch)</span></td>
|
||
<td>Returns true if the first object contains the second
|
||
one, else false. Both objects model segment.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="font-family: Courier New,Courier,monospace;">template
|
||
<typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>><br />
|
||
point_type <span style="font-weight: bold;">low</span>(const <span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span>&
|
||
segment)<br />
|
||
</td>
|
||
<td>Returns the low endpoint of an object that models
|
||
segment.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="font-family: Courier New,Courier,monospace;">template
|
||
<typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>><br />
|
||
point_type <span style="font-weight: bold;">high</span>(const <span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span>&
|
||
segment)</td>
|
||
<td>Returns the high endpoint of an object that models
|
||
segment.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="font-family: Courier New,Courier,monospace;">template
|
||
<typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>><br />
|
||
point_type <span style="font-weight: bold;">center</span>(const <span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span>&
|
||
segment)</td>
|
||
<td>Returns the central point of an object that models
|
||
segment.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="font-family: Courier New,Courier,monospace;">template
|
||
<typename <span style="font-family: Courier New,Courier,monospace;">Segment</span>,
|
||
typename Point><br />
|
||
void <span style="font-weight: bold;">low</span>(<span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span>&
|
||
segment, const Point& point)</td>
|
||
<td>Sets the low endpoint of an object that models segment.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="font-family: Courier New,Courier,monospace;">template
|
||
<typename <span style="font-family: Courier New,Courier,monospace;">Segment,
|
||
typename Point</span>><br />
|
||
void <span style="font-weight: bold;">high</span>(<span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span>&
|
||
segment, const Point& point)</td>
|
||
<td>Sets the high endpoint of an object that models of
|
||
segment.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span
|
||
style="font-family: Courier New,Courier,monospace;">template
|
||
<typename </span><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><span
|
||
style="font-family: Courier New,Courier,monospace;">></span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">distance_type
|
||
<span style="font-weight: bold;">length</span>(const </span><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><span
|
||
style="font-family: Courier New,Courier,monospace;">& segment)</span><br />
|
||
</td>
|
||
<td>Returns length of an object that models segment.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename </font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">><br />
|
||
</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& <b>scale_up</b>(</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& </font><font face="Courier New">segment</font><font
|
||
face="Courier New">, <br />
|
||
unsigned_area_type factor)</font></td>
|
||
<td>Multiplies x and y coordinates of both endpoints of an
|
||
object that models segment by unsigned factor.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename </font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">><br />
|
||
</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& <b>scale_down</b>(</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& </font><font face="Courier New">segment</font><font
|
||
face="Courier New">, <br />
|
||
unsigned_area_type factor)</font></td>
|
||
<td>Divides x and y coordinates of both endpoints of an
|
||
object that models segment by unsigned factor.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename </font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">, typename Scale><br />
|
||
</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& <b>scale</b>(</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& </font><font face="Courier New">segment</font><font
|
||
face="Courier New">, const Scale& sc) </font></td>
|
||
<td>Calls
|
||
the scale member function of the scaling type on the low and high
|
||
endpoint of
|
||
an object that models segment and updates the segment with the
|
||
scaled endpoints.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename </font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">, typename Transform><br />
|
||
</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& <b>transform</b>(</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& segment, const </font><font
|
||
face="Courier New">Transform</font><font face="Courier New">& tr) </font></td>
|
||
<td>Calls the transform member function of transform type
|
||
on the low and high endpoints of an object that models segment and
|
||
updates the segment with the transformed endpoints.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename </font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">><br />
|
||
</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& <b>move</b>(</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& segment, orientation_2d<br />
|
||
coordinate_difference displacement)</font></td>
|
||
<td>Adds displacement value to the x or y coordinates of
|
||
both endpoints of an object
|
||
that models segment indicated by the orientation_2d.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<</font><span style="font-family: Courier New,Courier,monospace;">Segment,
|
||
Point</span><font face="Courier New">><br />
|
||
</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& <b>convolve</b>(</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& segment, const Point& point)</font></td>
|
||
<td>Convolves both endpoints of an object that models
|
||
segment with an object that models a point.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<</font><span style="font-family: Courier New,Courier,monospace;">Segment,
|
||
Point</span><font face="Courier New">><br />
|
||
</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& <b>deconvolve</b>(</font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& segment, const Point& point)</font></td>
|
||
<td>Deconvolves both endpoints of an object that models
|
||
segment with an object that models a point. </td>
|
||
</tr>
|
||
<tr>
|
||
<td style="font-family: Courier New,Courier,monospace;">template
|
||
<typename Segment1, typename Segment2><br />
|
||
bool <span style="font-weight: bold;">abuts</span>(const Segment1&
|
||
segment1,<br />
|
||
const Segment2& segment2, direction_1d dir)</td>
|
||
<td>Returns true if two objects that model segment abut,
|
||
depending on the direction_1d value.</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="font-family: Courier New,Courier,monospace;">template
|
||
<typename Segment1, typename Segment2><br />
|
||
bool <span style="font-weight: bold;">abuts</span>(const Segment1&
|
||
segment1,<br />
|
||
const
|
||
Segment2& segment2)</td>
|
||
<td>Returns true if two objects that model segment abut:
|
||
either the first one to the second one or vice versa.</td>
|
||
</tr>
|
||
<tr>
|
||
<td><span
|
||
style="font-family: Courier New,Courier,monospace;">template
|
||
<typename Segment1, typename Segment2></span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">bool
|
||
<span style="font-weight: bold;">intersects</span>(const
|
||
Segment1& segment1,</span><br
|
||
style="font-family: Courier New,Courier,monospace;" />
|
||
<span style="font-family: Courier New,Courier,monospace;">
|
||
const Segment2& segment2,<br />
|
||
|
||
bool consider_touch)</span><br />
|
||
</td>
|
||
<td>Returns true if two objects that model segment
|
||
intersect, else false.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="font-family: Courier New,Courier,monospace;"><font
|
||
face="Courier New">template
|
||
<typename </font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment, typename
|
||
Point</span><font face="Courier New">><br />
|
||
distance_type <b>euclidean_distance</b>(<br />
|
||
const </font><span
|
||
style="font-family: Courier New,Courier,monospace;">Segment</span><font
|
||
face="Courier New">& segment, const Point& point)</font> </td>
|
||
<td>Returns distance from an object that models segment
|
||
to an object that models point. </td>
|
||
</tr>
|
||
<tr>
|
||
<td style="font-family: Courier New,Courier,monospace;"><font
|
||
face="Courier New">template
|
||
<typename Segment1, typename </font><font face="Courier New">Segment2</font><font
|
||
face="Courier New">><br />
|
||
distance_type <b>euclidean_distance</b>(<br />
|
||
const </font><font face="Courier New">Segment1</font><font
|
||
face="Courier New">& segment1, const </font><font
|
||
face="Courier New">Segment2</font><font face="Courier New">&
|
||
segment2)</font> </td>
|
||
<td>Returns distance between two objects that model
|
||
segment. </td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<h1>Segment Data</h1>
|
||
<p> </p>
|
||
<p>The library provides a model of the segment concept declared <font
|
||
face="Courier New">template<typename T> segment_data</font>,
|
||
where
|
||
T is the coordinate type.</p>
|
||
<p>This data type is used internally when a segment is needed and
|
||
is available to the library user, who finds it convenient to use a
|
||
library segment data type instead of providing their own. The
|
||
data
|
||
type is implemented to be convenient to use with the library traits.</p>
|
||
<h2>Members</h2>
|
||
<table style="width: 100%;" id="table2" border="1">
|
||
<tbody>
|
||
<tr>
|
||
<td width="586"><b><font face="Courier New">geometry_type</font></b></td>
|
||
<td>segment_concept</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><b><font face="Courier New">coordinate_type</font></b></td>
|
||
<td>T</td>
|
||
</tr>
|
||
<tr>
|
||
<td><b><font face="Courier New">point_type</font></b></td>
|
||
<td>point_data<T><br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New"><b>segment_data</b>()</font></td>
|
||
<td>Default constructor.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New"><b>segment_data</b>(const
|
||
point_type& low,<br />
|
||
|
||
const point_type& high)</font></td>
|
||
<td>Constructs a segment from the given endpoints.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New"><b>segment_data</b>(const
|
||
segment_data& that)</font></td>
|
||
<td>Copy constructor.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">segment_data& <b>operator=</b>(const
|
||
segment_data& that)</font></td>
|
||
<td>Assignment operator.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<typename SegmentType><b><br />
|
||
</b>segment_data& <b>operator=</b>(const </font><font
|
||
face="Courier New">SegmentType</font><font face="Courier New">&
|
||
that)
|
||
const</font></td>
|
||
<td>Assign from an object that is a model of segment.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">bool<b> operator==</b>(const
|
||
segment_data& that) const</font></td>
|
||
<td>Equality operator overload.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New"><b> </b>bool<b>
|
||
operator!=</b>(const segment_data& that) const</font></td>
|
||
<td>Inequality operator overload.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New"><b> </b>bool<b>
|
||
operator<</b>(const segment_data& that) const</font></td>
|
||
<td>Less operator overload. Compares low endpoints then
|
||
high endpoints to break ties.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New"><b> </b>bool<b>
|
||
operator<=</b>(const segment_data& that) const</font></td>
|
||
<td>Less or equal operator overload. Compares low endpoints
|
||
then high endpoints to break ties.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New"><b> </b>bool<b>
|
||
operator></b>(const segment_data& that) const</font></td>
|
||
<td>Greater operator overload. Compares low endpoints then
|
||
high endpoints to break ties.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New"><b> </b>bool<b>
|
||
operator>=</b>(const segment_data& that) const</font></td>
|
||
<td>Greater or equal operator overload. Compares low
|
||
endpoints then high endpoints to break ties.<br />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">point_type <b>get</b>(direction_1d
|
||
dir) const</font></td>
|
||
<td>Retrieves the low/high endpoint considering direction
|
||
value.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">point_type <span
|
||
style="font-weight: bold;">low</span>() const</font></td>
|
||
<td>Retrieves the low endpoint.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">point_type <span
|
||
style="font-weight: bold;">high</span>() const</font></td>
|
||
<td>Retrieves the high endpoint.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">void <b>set</b></font><font
|
||
face="Courier New">(direction_1d dir</font><font face="Courier New">,
|
||
const point_type& point)</font></td>
|
||
<td>Sets the endpoint in the given direction.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">segment_data& <span
|
||
style="font-weight: bold;">low</span>(const point_type& point)</font></td>
|
||
<td>Sets the low endpoint.</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">segment_data& <span
|
||
style="font-weight: bold;">high(</span>const point_type& point)</font></td>
|
||
<td>Sets the high endpoint.</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<h1>Segment Utils</h1>
|
||
<p> </p>
|
||
<p>The library provides several algorithms for the manipulation
|
||
of sets of segment data. In particular, the generalize line segment
|
||
intersection algorithm used for polygon set operations is exposed
|
||
through several interfaces to allow it to be used with any collection
|
||
or sequence of objects that model the <font face="Courier New">segment_concept</font>.
|
||
</p>
|
||
<h2>Functions</h2>
|
||
<table style="width: 100%;" id="table3" border="1">
|
||
<tbody>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<</font><font face="Courier New">typename SegmentContainer</font><font
|
||
face="Courier New">,</font><font face="Courier New"><br />
|
||
typename
|
||
SegmentIterator</font><font face="Courier New">><b><br />
|
||
</b>void <b>intersect_segments</b>(<br />
|
||
</font><font face="Courier New">SegmentContainer*
|
||
result,</font><br />
|
||
<font face="Courier New"> SegmentIterator
|
||
first,<br />
|
||
SegmentIterator last) </font></td>
|
||
<td>Accumulates
|
||
the result of splitting the segments in the iterator range at their
|
||
intersection points into the result container. Preconditions: segment
|
||
type used by all the input structures should model segment
|
||
concept.Postconditions: no segments intersect except at their end
|
||
points. Useful to satisfy the precondition of voronoi diagram
|
||
construction. Expected n log n runtime, worst case quadratic runtime
|
||
wrt. vertices + intersections. </td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<</font><font face="Courier New">typename Segment,</font><font
|
||
face="Courier New"><br />
|
||
</font><font
|
||
face="Courier New">typename SegmentIterator</font><font
|
||
face="Courier New">><b><br />
|
||
</b>void <b>intersect_segments</b>(<br />
|
||
</font><font face="Courier New">vector<pair<size_t,
|
||
Segment>* result,</font><br />
|
||
<font face="Courier New"> SegmentIterator
|
||
first,<br />
|
||
SegmentIterator last)</font></td>
|
||
<td>Accumulates
|
||
the result of splitting the segments in the iterator range at their
|
||
intersection points into the result container. Preconditions: segment
|
||
type used by all the input structures should model segment concept.
|
||
Postconditions: no segments intersect except at their end points. The
|
||
index of the input segment is paired with each resultant segment that
|
||
was split to produce it to associate the result segments with the
|
||
inputs segments. Expected n log n runtime, worst case quadratic runtime
|
||
wrt. vertices + intersections. </td>
|
||
</tr>
|
||
<tr>
|
||
<td width="586"><font face="Courier New">template
|
||
<</font><font face="Courier New">typename Rectangle,<br />
|
||
</font><font
|
||
face="Courier New">typename </font><font face="Courier New">SegmentIterator</font><font
|
||
face="Courier New">><b><br />
|
||
</b>void <span style="font-weight: bold;">envelope_segments</span>(<br />
|
||
</font><font face="Courier New">Rectangle* rect,</font><br />
|
||
<font face="Courier New"> </font><font
|
||
face="Courier New">SegmentIterator first,<br />
|
||
SegmentIterator last</font><font face="Courier New">) </font></td>
|
||
<td>Computes
|
||
the bounding rectangle of the iterator range of line segments.
|
||
Preconditions: segment type and rectangle type used by the input
|
||
structures should model segment concept and rectangle concept
|
||
respectively. Linear runtime. </td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="background-color: rgb(238, 238, 238);" nowrap="1"
|
||
valign="top"> </td>
|
||
<td
|
||
style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;"
|
||
valign="top" width="100%">
|
||
<table class="docinfo" id="table4" frame="void" rules="none">
|
||
<colgroup> <col class="docinfo-name" /><col
|
||
class="docinfo-content" /> </colgroup> <tbody valign="top">
|
||
<tr>
|
||
<th class="docinfo-name">Copyright:</th>
|
||
<td>Copyright <20> Intel Corporation 2008-2010.</td>
|
||
</tr>
|
||
<tr class="field">
|
||
<th class="docinfo-name">License:</th>
|
||
<td class="field-body">Distributed under the Boost Software
|
||
License, Version 1.0. (See accompanying file <tt class="literal"> <span
|
||
class="pre">LICENSE_1_0.txt</span></tt> or copy at <a
|
||
class="reference" target="_top"
|
||
href="http://www.boost.org/LICENSE_1_0.txt">
|
||
http://www.boost.org/LICENSE_1_0.txt</a>)</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</body>
|
||
</html>
|