]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/polygon/doc/gtl_polygon_90_set_concept.htm
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / polygon / doc / gtl_polygon_90_set_concept.htm
CommitLineData
7c673cae
FG
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<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><!--
3 Copyright 2009-2010 Intel Corporation
4 license banner
5--><title>Boost Polygon Library: Polygon 90 Set Concept</title>
6
7
8
9
10 <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1" /><!-- <link type="text/css" rel="stylesheet" href="adobe_source.css"> --></head><body>
11<table style="margin: 0pt; padding: 0pt; width: 100%;" border="0" cellpadding="0" cellspacing="0">
12 <tbody>
13 <tr>
14 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top">
15 <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>
16 <div style="margin: 5px;">
17 <h3 class="navbar">Contents</h3>
18 <ul>
19 <li><a href="index.htm">Boost.Polygon Main Page</a></li>
20 <li><a href="gtl_design_overview.htm">Design Overview</a></li>
21 <li><a href="gtl_isotropy.htm">Isotropy</a></li>
22 <li><a href="gtl_coordinate_concept.htm">Coordinate Concept</a></li>
23 <li><a href="gtl_interval_concept.htm">Interval Concept</a></li>
24 <li><a href="gtl_point_concept.htm">Point Concept</a></li>
25 <li><a href="gtl_segment_concept.htm">Segment Concept</a></li>
26 <li><a href="gtl_rectangle_concept.htm">Rectangle Concept</a></li>
27 <li><a href="gtl_polygon_90_concept.htm">Polygon 90 Concept</a></li>
28 <li><a href="gtl_polygon_90_with_holes_concept.htm">Polygon 90
29With Holes Concept</a></li>
30 <li><a href="gtl_polygon_45_concept.htm">Polygon 45 Concept</a></li>
31 <li><a href="gtl_polygon_45_with_holes_concept.htm">Polygon 45
32With Holes Concept</a></li>
33 <li><a href="gtl_polygon_concept.htm">Polygon Concept</a></li>
34 <li><a href="gtl_polygon_with_holes_concept.htm">Polygon With
35Holes Concept</a></li>
36 <li>Polygon 90 Set Concept</li>
37 <li><a href="gtl_polygon_45_set_concept.htm">Polygon 45 Set
38Concept</a></li>
39 <li><a href="gtl_polygon_set_concept.htm">Polygon Set Concept</a></li>
40 <li><a href="gtl_connectivity_extraction_90.htm">Connectivity
41Extraction 90</a></li>
42 <li><a href="gtl_connectivity_extraction_45.htm">Connectivity
43Extraction 45</a></li>
44 <li><a href="gtl_connectivity_extraction.htm">Connectivity
45Extraction</a></li>
46 <li><a href="gtl_property_merge_90.htm">Property Merge 90</a></li>
47 <li><a href="gtl_property_merge_45.htm">Property Merge 45</a></li>
48 <li><a href="gtl_property_merge.htm">Property Merge</a></li>
49 <li><a href="voronoi_main.htm">Voronoi Main Page<br />
50 </a></li>
51 <li><a href="voronoi_benchmark.htm">Voronoi Benchmark</a><br />
52 </li>
53 <li><a href="voronoi_builder.htm">Voronoi Builder</a></li>
54 <li><a href="voronoi_diagram.htm">Voronoi Diagram</a></li>
55 </ul>
56 <h3 class="navbar">Other Resources</h3>
57 <ul>
58 <li><a href="GTL_boostcon2009.pdf">GTL Boostcon 2009 Paper</a></li>
59 <li><a href="GTL_boostcon_draft03.pdf">GTL Boostcon 2009
60Presentation</a></li>
61 <li><a href="analysis.htm">Performance Analysis</a></li>
62 <li><a href="gtl_tutorial.htm">Layout Versus Schematic Tutorial</a></li>
63 <li><a href="gtl_minkowski_tutorial.htm">Minkowski Sum Tutorial</a></li>
64 <li><a href="voronoi_basic_tutorial.htm">Voronoi Basic Tutorial</a></li>
65 <li><a href="voronoi_advanced_tutorial.htm">Voronoi Advanced
66Tutorial</a></li>
67 </ul>
68 </div>
69 <h3 class="navbar">Polygon Sponsor</h3>
70 <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>
71 </td>
72 <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
73<!-- End Header --><br />
74 <p>
75 </p>
76 <h1>Polygon 90 Set Concept</h1>
77 <p> </p>
78 <p>The polygon_90_set concept tag is <font face="Courier New">
79polygon_90_set_concept</font></p>
80 <p> <font face="Times New Roman">The semantic of a
81polygon_90_set is zero or more Manhattan geometry regions.</font></p>
82 <p> <font face="Times New Roman">The motivation for providing
83the polygon_90_set_concept is that it is a very common special case of
84planar geometry which afford the implementation of a variety of
85optimizations on the general planar geometry algorithms.&nbsp;
86Manhattan geometry processing by the polygon_90_set_concept can be 100X
87faster than arbitrary angle polygon manipulation.&nbsp; Because the
88performance benefits are so large and the special case is important
89enough, the library provides these performance benefits for those
90application domains that require them.</font></p>
91 <p>Users are recommended to use std::vector and std::list of user
92defined polygons or library provided
93polygon_90_set_data&lt;coordinate_type&gt; objects.&nbsp; Lists and
94vectors of models of polygon_90_concept or
95polygon_90_with_holes_concept or rectangle_concept are automatically
96models of polygon_90_set_concept.</p>
97 <h2>Operators</h2>
98 <p>The return type of some operators is the <font face="Courier New">polygon_90_set_view</font> operator template
99type.&nbsp; This type is itself a model of the polygon_90_set concept,
100but furthermore can be used as an argument to the <font face="Courier New">polygon_90_set_data</font> constructor and
101assignment operator.&nbsp; The operator template exists to eliminate
102temp copies of intermediate results when Boolean operators are chained
103together.</p>
104 <p>Operators are declared inside the namespace <font face="Courier New">boost::polygon::operators</font>.</p>
105 <table id="table3" border="1" width="100%">
106 <tbody>
107 <tr>
108 <td width="586"><font face="Courier New">template
109&lt;typename T1, typename T2&gt;<br />
110polygon_90_set_view <b>operator</b>|(const T1&amp; l, const T2&amp; r)</font></td>
111 <td>Boolean OR operation (polygon set union).&nbsp; Accepts
112two objects that model polygon_90_set or one of its refinements.&nbsp;
113Returns an operator template that performs the operation on demand when
114chained or or nested in a library function call such as assign().&nbsp;
115O( n log n) runtime complexity and O(n) memory wrt vertices +
116intersections.</td>
117 </tr>
118 <tr>
119 <td width="586"><font face="Courier New">template
120&lt;typename T1, typename T2&gt;<br />
121polygon_90_set_view <b>operator</b>+(const T1&amp; l, const T2&amp; r)</font></td>
122 <td>Same as operator|.&nbsp; The plus sign is also used for
123OR operations in Boolean logic expressions.&nbsp; O( n log n) runtime
124complexity and O(n) memory wrt vertices + intersections.</td>
125 </tr>
126 <tr>
127 <td width="586"><font face="Courier New">template
128&lt;typename T1, typename T2&gt;<br />
129polygon_90_set_view <b>operator</b>&amp;(const T1&amp; l, const
130T2&amp; r)</font></td>
131 <td>Boolean AND operation (polygon set intersection).&nbsp;
132Accepts two objects that model polygon_90_set or one of its
133refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
134vertices + intersections.</td>
135 </tr>
136 <tr>
137 <td width="586"><font face="Courier New">template
138&lt;typename T1, typename T2&gt;<br />
139polygon_90_set_view <b>operator</b>*(const T1&amp; l, const T2&amp; r)</font></td>
140 <td>Same as operator&amp;.&nbsp; The multiplication symbol
141is also used for AND operations in Boolean logic expressions.&nbsp; O(
142n log n) runtime complexity and O(n) memory wrt vertices +
143intersections.</td>
144 </tr>
145 <tr>
146 <td width="586"><font face="Courier New">template
147&lt;typename T1, typename T2&gt;<br />
148polygon_90_set_view <b>operator</b>^(const T1&amp; l, const T2&amp; r)</font></td>
149 <td>Boolean XOR operation (polygon set
150disjoint-union).&nbsp; Accepts two objects that model polygon_90_set or
151one of its refinements.&nbsp; O( n log n) runtime complexity and O(n)
152memory wrt vertices + intersections.&nbsp; O( n log n) runtime
153complexity and O(n) memory wrt vertices + intersections.</td>
154 </tr>
155 <tr>
156 <td width="586"><font face="Courier New">template
157&lt;typename T1, typename T2&gt;<br />
158polygon_90_set_view <b>operator</b>-(const T1&amp; l, const T2&amp; r)</font></td>
159 <td>Boolean SUBTRACT operation (polygon set
160difference).&nbsp; Accepts two objects that model polygon_90_set or one
161of its refinements.&nbsp; O( n log n) runtime complexity and O(n)
162memory wrt vertices + intersections.</td>
163 </tr>
164 <tr>
165 <td width="586"><font face="Courier New">template
166&lt;typename T1, typename T2&gt;<br />
167T1&amp; <b>operator</b>|=(const T1&amp; l, const T2&amp; r)</font></td>
168 <td>Same as operator|, but with self assignment, left
169operand must model polygon_90_set and not one of it's
170refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
171vertices + intersections.</td>
172 </tr>
173 <tr>
174 <td width="586"><font face="Courier New">template
175&lt;typename T1, typename T2&gt;<br />
176T1&amp; <b>operator</b>+=(T1&amp; l, const T2&amp; r)</font></td>
177 <td>Same as operator+, but with self assignment, left
178operand must model polygon_90_set and not one of it's
179refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
180vertices + intersections.</td>
181 </tr>
182 <tr>
183 <td width="586"><font face="Courier New">template
184&lt;typename T1, typename T2&gt;<br />
185T1&amp; <b>operator</b>&amp;=(const T1&amp; l, const T2&amp; r)</font></td>
186 <td>Same as operator&amp;, but with self assignment, left
187operand must model polygon_90_set and not one of it's
188refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
189vertices + intersections.</td>
190 </tr>
191 <tr>
192 <td width="586"><font face="Courier New">template
193&lt;typename T1, typename T2&gt;<br />
194T1&amp; <b>operator</b>*=(T1&amp; l, const T2&amp; r)</font></td>
195 <td>Same as operator*, but with self assignment, left
196operand must model polygon_90_set and not one of it's
197refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
198vertices + intersections.</td>
199 </tr>
200 <tr>
201 <td width="586"><font face="Courier New">template
202&lt;typename T1, typename T2&gt;<br />
203T1&amp; <b>operator</b>^=(const T1&amp; l, const T2&amp; r)</font></td>
204 <td>Same as operator^, but with self assignment, left
205operand must model polygon_90_set and not one of it's
206refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
207vertices + intersections.</td>
208 </tr>
209 <tr>
210 <td width="586"><font face="Courier New">template
211&lt;typename T1, typename T2&gt;<br />
212T1&amp; <b>operator</b>-=(T1&amp; l, const T2&amp; r)</font></td>
213 <td>Same as operator-, but with self assignment, left
214operand must model polygon_90_set and not one of it's
215refinements.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
216vertices + intersections.</td>
217 </tr>
218 <tr>
219 <td width="586"><font face="Courier New">template
220&lt;typename T1&gt;<br />
221T1 <b>operator</b>+(const T1&amp;, coordinate_type bloating)</font></td>
222 <td>Performs resize operation, inflating by bloating
223ammount.&nbsp; If negative the result is a shrink instead of
224bloat.&nbsp; Note: returns result by value.&nbsp; O( n log n) runtime
225complexity and O(n) memory wrt vertices + intersections.</td>
226 </tr>
227 <tr>
228 <td width="586"><font face="Courier New">template
229&lt;typename T1, typename T2&gt;<br />
230T1 <b>operator</b>-(const T1&amp;, coordinate_type shrinking)</font></td>
231 <td>Performs resize operation, deflating by bloating
232ammount.&nbsp; If negative the result is a bloat instead of
233shrink.&nbsp; Note: returns result by value.&nbsp; O( n log n) runtime
234complexity and O(n) memory wrt vertices + intersections.</td>
235 </tr>
236 <tr>
237 <td width="586"><font face="Courier New">template
238&lt;typename T1, typename T2&gt;<br />
239T1&amp; <b>operator</b>+=(const T1&amp;, coordinate_type bloating)</font></td>
240 <td>Performs resize operation, inflating by bloating
241ammount.&nbsp; If negative the result is a shrink instead of
242bloat.&nbsp; Returns reference to modified argument.&nbsp; O( n log n)
243runtime complexity and O(n) memory wrt vertices + intersections.</td>
244 </tr>
245 <tr>
246 <td width="586"><font face="Courier New">template
247&lt;typename T1, typename T2&gt;<br />
248T1&amp; <b>operator</b>-=(const T1&amp;, coordinate_type shrinking)</font></td>
249 <td>Performs resize operation, deflating by bloating
250ammount.&nbsp; If negative the result is a bloat instead of
251shrink.&nbsp; Returns reference to modified argument.&nbsp; O( n log n)
252runtime complexity and O(n) memory wrt vertices + intersections.</td>
253 </tr>
254 </tbody>
255 </table>
256 <h2>Functions</h2>
257 <table id="table1" border="1" width="100%">
258 <tbody>
259 <tr>
260 <td width="586"><font face="Courier New">template
261&lt;typename T1, typename T2&gt;<br />
262T1&amp; <b>assign</b>(T1&amp; lvalue, const T2&amp; rvalue)</font></td>
263 <td>Eliminates overlaps in geometry and copies from an
264object that models polygon_90_set or any of its refinements into an
265object that models polygon_90_set.&nbsp; O( n log n) runtime complexity
266and O(n) memory wrt vertices + intersections.</td>
267 </tr>
268 <tr>
269 <td width="586"><font face="Courier New">template
270&lt;typename T1, typename T2&gt;<br />
271bool <b>equivalence</b>(const T1&amp; lvalue, const T2&amp; rvalue) </font></td>
272 <td>Returns true if an object that models polygon_90_set or
273one of its refinements covers the exact same geometric regions as
274another object that models polygon_90_set or one of its
275refinements.&nbsp; For example: two of polygon_90 objects.&nbsp; O( n
276log n) runtime complexity and O(n) memory wrt vertices + intersections.</td>
277 </tr>
278 <tr>
279 <td width="586"><font face="Courier New">template
280&lt;typename output_container_type, typename T&gt;<br />
281void <b>get_rectangles</b>(output_container_type&amp; output, <br />
282&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
283const T&amp; polygon_set)</font></td>
284 <td>Output container is expected to be a standard
285container.&nbsp; Slices geometry of an object that models
286polygon_90_set or one of its refinements into non overlapping
287rectangles and appends them to the output.&nbsp; O( n log n) runtime
288complexity and O(n) memory wrt vertices + intersections. </td>
289 </tr>
290 <tr>
291 <td width="586"><font face="Courier New">template
292&lt;typename output_container_type, typename T&gt;<br />
293void <b>get_max_rectangles</b>(output_container_type&amp; output, <br />
294&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
295const T&amp; polygon_set)</font></td>
296 <td>Output container is expected to be a standard
297container.&nbsp; Given an object that models polygon_90_set or one of
298its refinements finds all overlapping rectangles that are maximal in
299area and appends them to the output.&nbsp; Expected n log n runtime,
300worst case quadratic rutnime.</td>
301 </tr>
302 <tr>
303 <td width="586"><font face="Courier New">template
304&lt;typename polygon_set_type&gt;<br />
305void <b>clear</b>(polygon_set_type&amp; polygon_set)</font></td>
306 <td>Makes the object empty of geometry.</td>
307 </tr>
308 <tr>
309 <td width="586"><font face="Courier New">template
310&lt;typename polygon_set_type&gt;<br />
311bool <b>empty</b>(const polygon_set_type&amp; polygon_set)</font></td>
312 <td>Checks whether the object is empty of geometry.&nbsp;
313Polygons that are completely covered by holes will result in empty
314returning true.&nbsp; O( n log n) runtime complexity and O(n) memory
315wrt vertices + intersections. </td>
316 </tr>
317 <tr>
318 <td width="586"><font face="Courier New">template
319&lt;typename T, typename rectangle_type&gt;<br />
320bool <b>extents</b>(rectangle_type&amp; extents_rectangle, <br />
321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
322const T&amp; polygon_set)</font></td>
323 <td>Computes bounding box of an object that models
324polygon_90_set and stores it in an object that models rectangle.&nbsp;
325If the polygon set is empty returns false.&nbsp; If there are holes
326outside of shells they do not contribute to the extents of the polygon
327set.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
328+ intersections. </td>
329 </tr>
330 <tr>
331 <td width="586"><font face="Courier New">template
332&lt;typename T&gt;<br />
333manhattan_area_type <b>area</b>(const T&amp; polygon_set)</font></td>
334 <td>Computes the area covered by geometry in an object that
335models polygon_90_set.&nbsp; O( n log n) runtime complexity and O(n)
336memory wrt vertices + intersections. </td>
337 </tr>
338 <tr>
339 <td width="586"><font face="Courier New">template
340&lt;typename T1, typename T2&gt;<br />
341T1&amp; <b>interact</b>(T1&amp; a, const T2&amp; b)</font></td>
342 <td>Given an object that models polygon_90_set and an
343object that models polygon_90_set or one of its refinements, modifies a
344to retain only regions that overlap or touch regions in b.&nbsp; O( n
345log n) runtime complexity and O(n) memory wrt vertices + intersections.
346 </td>
347 </tr>
348 <tr>
349 <td width="586"><font face="Courier New">template
350&lt;typename T&gt;<br />
351T&amp; <b>self_intersect</b>(T&amp; polygon_set)</font></td>
352 <td>Given an object that models polygon_90_set that has
353self overlapping regions, modifies the argument to contain only the
354regions of overlap.&nbsp; O( n log n) runtime complexity and O(n)
355memory wrt vertices + intersections. </td>
356 </tr>
357 <tr>
358 <td width="586"><font face="Courier New">template
359&lt;typename T&gt;<br />
360T&amp; <b>self_xor</b>(T&amp; polygon_set)</font></td>
361 <td>Given an object that models polygon_90_set that has
362self overlapping regions, modifies the argument to contain only the
363regions that do not overlap.&nbsp; O( n log n) runtime complexity and
364O(n) memory wrt vertices + intersections. </td>
365 </tr>
366 <tr>
367 <td width="586"><font face="Courier New">template
368&lt;typename T&gt;<br />
369T&amp; <b>bloat</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
370 <td>Same as getting all the rectangles, bloating them and
371putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
372wrt vertices + intersections. </td>
373 </tr>
374 <tr>
375 <td width="586"><font face="Courier New">template
376&lt;typename T&gt;<br />
377T&amp; <b>bloat</b>(T&amp; polygon_set, orientation_2d orient,<br />
378&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
379bloating)</font></td>
380 <td>Same as getting all the rectangles, bloating them and
381putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
382wrt vertices + intersections. </td>
383 </tr>
384 <tr>
385 <td width="586"><font face="Courier New">template
386&lt;typename T&gt;<br />
387T&amp; <b>bloat</b>(T&amp; polygon_set, orientation_2d orient,<br />
388&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
389low_bloating,<br />
390&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
391high_bloating)</font></td>
392 <td>Same as getting all the rectangles, bloating them and
393putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
394wrt vertices + intersections. </td>
395 </tr>
396 <tr>
397 <td width="586"><font face="Courier New">template
398&lt;typename T&gt;<br />
399T&amp; <b>bloat</b>(T&amp; polygon_set, direction_2d dir,<br />
400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
401bloating)</font></td>
402 <td>Same as getting all the rectangles, bloating them and
403putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
404wrt vertices + intersections. </td>
405 </tr>
406 <tr>
407 <td width="586"><font face="Courier New">template
408&lt;typename T&gt;<br />
409T&amp; <b>bloat</b>(T&amp; polygon_set, <br />
410&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
411west_bloating,<br />
412&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
413east_bloating,<br />
414&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
415south_bloating,<br />
416&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
417north_bloating)</font></td>
418 <td>Same as getting all the rectangles, bloating them and
419putting them back.&nbsp; O( n log n) runtime complexity and O(n) memory
420wrt vertices + intersections. </td>
421 </tr>
422 <tr>
423 <td width="586"><font face="Courier New">template
424&lt;typename T&gt;<br />
425T&amp; <b>shrink</b>(T&amp; polygon_set, unsigned_area_type shrinking)</font></td>
426 <td>Same as getting all the rectangles of the inverse,
427bloating them and overwriting the polygon set with the resulting
428regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
429memory wrt vertices + intersections. </td>
430 </tr>
431 <tr>
432 <td width="586"><font face="Courier New">template
433&lt;typename T&gt;<br />
434T&amp; <b>shrink</b>(T&amp; polygon_set, orientation_2d orient,<br />
435&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
436unsigned_area_type shrinking)</font></td>
437 <td>Same as getting all the rectangles of the inverse,
438bloating them and overwriting the polygon set with the resulting
439regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
440memory wrt vertices + intersections. </td>
441 </tr>
442 <tr>
443 <td width="586"><font face="Courier New">template
444&lt;typename T&gt;<br />
445T&amp; <b>shrink</b>(T&amp; polygon_set, orientation_2d orient,<br />
446&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
447unsigned_area_type low_shrinking,<br />
448&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
449unsigned_area_type high_shrinking)</font></td>
450 <td>Same as getting all the rectangles of the inverse,
451bloating them and overwriting the polygon set with the resulting
452regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
453memory wrt vertices + intersections. </td>
454 </tr>
455 <tr>
456 <td width="586"><font face="Courier New">template
457&lt;typename T&gt;<br />
458T&amp; <b>shrink</b>(T&amp; polygon_set, direction_2d dir,<br />
459&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
460unsigned_area_type shrinking)</font></td>
461 <td>Same as getting all the rectangles of the inverse,
462bloating them and overwriting the polygon set with the resulting
463regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
464memory wrt vertices + intersections. </td>
465 </tr>
466 <tr>
467 <td width="586"><font face="Courier New">template
468&lt;typename T&gt;<br />
469T&amp; <b>shrink</b>(T&amp; polygon_set, <br />
470&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
471unsigned_area_type west_shrinking,<br />
472&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
473unsigned_area_type east_shrinking,<br />
474&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
475unsigned_area_type south_shrinking,<br />
476&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
477unsigned_area_type north_shrinking)</font></td>
478 <td>Same as getting all the rectangles of the inverse,
479bloating them and overwriting the polygon set with the resulting
480regions then negating.&nbsp; O( n log n) runtime complexity and O(n)
481memory wrt vertices + intersections. </td>
482 </tr>
483 <tr>
484 <td width="586"><font face="Courier New">template
485&lt;typename T, typename coord_type&gt;<br />
486T&amp; <b>resize</b>(T&amp; polygon_set, coord_type resizing)</font></td>
487 <td>Same as bloat if resizing is positive, same as shrink
488if resizing is negative.</td>
489 </tr>
490 <tr>
491 <td width="586"><font face="Courier New">template
492&lt;typename T, typename coord_type&gt;<br />
493T&amp; <b>resize</b>(polygon_set_type&amp; polygon_set, <br />
494&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coord_type west,
495coord_type east, <br />
496&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coord_type
497south, coord_type north)</font></td>
498 <td>Same as bloat if resizing is positive, same as shrink
499if resizing is negative.&nbsp; O( n log n) runtime complexity and O(n)
500memory wrt vertices + intersections. </td>
501 </tr>
502 <tr>
503 <td width="586"><font face="Courier New">template
504&lt;typename T&gt;<br />
505T&amp; <b>grow_and</b>(T&amp; polygon_set, unsigned_area_type bloating)</font></td>
506 <td>Same as bloating non-overlapping regions and then
507applying self intersect to retain only the overlaps introduced by the
508bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
509vertices + intersections. </td>
510 </tr>
511 <tr>
512 <td width="586"><font face="Courier New">template
513&lt;typename T&gt;<br />
514T&amp; <b>grow_and</b>(T&amp; polygon_set, orientation_2d orient,<br />
515&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
516unsigned_area_type bloating)</font></td>
517 <td>Same as bloating non-overlapping regions and then
518applying self intersect to retain only the overlaps introduced by the
519bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
520vertices + intersections. </td>
521 </tr>
522 <tr>
523 <td width="586"><font face="Courier New">template
524&lt;typename T&gt;<br />
525T&amp; <b>grow_and</b>(T&amp; polygon_set, orientation_2d orient,<br />
526&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
527unsigned_area_type low_bloating,<br />
528&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
529unsigned_area_type high_bloating)</font></td>
530 <td>Same as bloating non-overlapping regions and then
531applying self intersect to retain only the overlaps introduced by the
532bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
533vertices + intersections. </td>
534 </tr>
535 <tr>
536 <td width="586"><font face="Courier New">template
537&lt;typename T&gt;<br />
538T&amp; <b>grow_and</b>(T&amp; polygon_set, direction_2d dir,<br />
539&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
540unsigned_area_type bloating)</font></td>
541 <td>Same as bloating non-overlapping regions and then
542applying self intersect to retain only the overlaps introduced by the
543bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
544vertices + intersections. </td>
545 </tr>
546 <tr>
547 <td width="586"><font face="Courier New">template
548&lt;typename T&gt;<br />
549T&amp; <b>grow_and</b>(T&amp; polygon_set, <br />
550&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
551unsigned_area_type west_bloating,<br />
552&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
553unsigned_area_type east_bloating,<br />
554&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
555unsigned_area_type south_bloating,<br />
556&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
557unsigned_area_type north_bloating)</font></td>
558 <td>Same as bloating non-overlapping regions and then
559applying self intersect to retain only the overlaps introduced by the
560bloat.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
561vertices + intersections. </td>
562 </tr>
563 <tr>
564 <td width="586"><font face="Courier New">template
565&lt;typename T&gt;<br />
566T&amp; <b>scale_up</b>(T&amp; polygon_set, unsigned_area_type factor)</font></td>
567 <td>Scales geometry up by unsigned factor.&nbsp; O( n log
568n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
569 </tr>
570 <tr>
571 <td width="586"><font face="Courier New">template
572&lt;typename T&gt;<br />
573T&amp; <b>scale_down</b>(T&amp; polygon_set, unsigned_area_type factor)</font></td>
574 <td>Scales geometry down by unsigned factor.&nbsp; O( n log
575n) runtime complexity and O(n) memory wrt vertices + intersections. </td>
576 </tr>
577 <tr>
578 <td width="586"><font face="Courier New">template
579&lt;typename T, typename scaling_type&gt;<br />
580T&amp; <b>scale</b>(polygon_set_type&amp; polygon_set, <br />
581&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const
582scaling_type&amp; scaling)</font></td>
583 <td>Scales geometry by applying scaling.scale() on all
584vertices.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
585vertices + intersections. </td>
586 </tr>
587 <tr>
588 <td width="586"><font face="Courier New">template
589&lt;typename T, typename coord_type&gt;<br />
590T&amp; <b>move</b>(T&amp; polygon_set,<br />
591&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orientation_2d orient,
592coord_type displacement)</font></td>
593 <td>Moves geometry by displacement amount in the
594orientation.&nbsp;&nbsp;&nbsp; O( n log n) runtime complexity and O(n)
595memory wrt vertices + intersections. </td>
596 </tr>
597 <tr>
598 <td width="586"><font face="Courier New">template
599&lt;typename T, typename coord_type&gt;<br />
600T&amp; <b>move</b>(T&amp; polygon_set, coord_type x_displacement, <br />
601&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coord_type y_displacement)</font></td>
602 <td>Moves the geometry by x_dispacement in x and
603y_displacement in y.&nbsp; Note: for consistency should be
604convolve(polygon_set, point).&nbsp; O( n log n) runtime complexity and
605O(n) memory wrt vertices + intersections. </td>
606 </tr>
607 <tr>
608 <td width="586"><font face="Courier New">template
609&lt;typename T, typename transformation_type&gt;<br />
610T&amp; <b>transform</b>(T&amp; polygon_set,<br />
611&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
612const transformation_type&amp; transformation)</font></td>
613 <td>Applies transformation.transform() on all
614vertices.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
615vertices + intersections. </td>
616 </tr>
617 <tr>
618 <td width="586"><font face="Courier New">template
619&lt;typename T&gt;<br />
620T&amp; <b>keep</b>(T&amp; polygon_set, <br />
621&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_area,<br />
622&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_area,<br />
623&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type min_width,<br />
624&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type max_width,<br />
625&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
626min_height,<br />
627&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned_area_type
628max_height)</font></td>
629 <td>Retains only regions that satisfy the min/max criteria
630in the argument list.&nbsp; Note: useful for visualization to cull too
631small polygons.&nbsp; O( n log n) runtime complexity and O(n) memory
632wrt vertices + intersections. </td>
633 </tr>
634 </tbody>
635 </table>
636 <h1>Polygon 90 Set Data Object</h1>
637 <p> </p>
638 <p>The polygon 90 set data type encapsulates the internal data
639format that serves as the input to the sweep-line algorithm that
640implements polygon-clipping boolean operations.&nbsp; It also
641internally keeps track of whether that data has been sorted or scanned
642and maintains the invariant that when its flags indicate that the data
643is sorted or scanned the data has not been changed to violate that
644assumption.&nbsp; Using the Polygon 90 Set Data type directly can be
645more efficient than using lists and vectors of polygons in the
646functions above because of the invariants it can enforce which provide
647the opportunity to maintain the data is sorted form rather than going
648all the way out to polygons then resorting those vertices for a
649subsequent operation.</p>
650 <p>The declaration of Polygon 90 Set Data is the following:</p>
651 <p><font face="Courier New">template &lt;typename T&gt;<br />
652class polygon_90_set_data;</font></p>
653 <p>The class is parameterized on the coordinate data type.&nbsp;
654Algorithms that benefit from knowledge of the invariants enforced by
655the class are implemented as member functions to provide them access to
656information about those invariants.&nbsp; </p>
657 <h2>Member Functions</h2>
658 <table id="table2" border="1" width="100%">
659 <tbody>
660 <tr>
661 <td width="586"><font face="Courier New"><b>polygon_90_set_data</b>()</font></td>
662 <td>Default constructor.&nbsp; Scanning orientation
663defaults to HORIZONTAL</td>
664 </tr>
665 <tr>
666 <td width="586"><font face="Courier New"><b>polygon_90_set_data</b>(orientation_2d
667orient)</font></td>
668 <td>Construct with scanning orientation.</td>
669 </tr>
670 <tr>
671 <td width="586"><font face="Courier New">template
672&lt;typename iT&gt;<br />
673 <b>polygon_90_set_data</b>(orientation_2d orient, <br />
674&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
675iT input_begin, iT input_end)</font></td>
676 <td>Construct with scanning orientation from an iterator
677range of insertable objects.</td>
678 </tr>
679 <tr>
680 <td width="586"><font face="Courier New"> <b>polygon_90_set_data</b>(const
681polygon_90_set_data&amp; that)</font></td>
682 <td>Copy construct.</td>
683 </tr>
684 <tr>
685 <td width="586"><font face="Courier New">template
686&lt;typename l, typename r, typename op&gt;<br />
687 <b>polygon_90_set_data</b>(const
688polygon_90_set_view&lt;l,r,op&gt;&amp; t)</font></td>
689 <td>Copy construct from a Boolean operator template.</td>
690 </tr>
691 <tr>
692 <td width="586"><font face="Courier New">
693 <b>polygon_90_set_data</b>(orientation_2d orient, <br />
694&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
695const polygon_90_set_data&amp; that)</font></td>
696 <td>Construct with scanning orientation and copy from
697another polygon set.</td>
698 </tr>
699 <tr>
700 <td width="586"><font face="Courier New">polygon_90_set_data&amp;
701 <br />
702 <b>operator=</b>(const polygon_90_set_data&amp; that)</font></td>
703 <td>Assignment from another polygon set, may change
704scanning orientation.</td>
705 </tr>
706 <tr>
707 <td width="586"><font face="Courier New">template
708&lt;typename l, typename r, typename op&gt;<br />
709polygon_90_set_data&amp; <br />
710 <b>operator=</b>(const polygon_90_set_view&lt;l, r,
711op&gt;&amp; that)</font></td>
712 <td>Assignment from a Boolean operator template.</td>
713 </tr>
714 <tr>
715 <td width="586"><font face="Courier New">template
716&lt;typename geometry_object&gt;<br />
717polygon_90_set_data&amp; <b>operator=</b>(const geometry_object&amp;
718geo)</font></td>
719 <td>Assignment from an insertable object.</td>
720 </tr>
721 <tr>
722 <td width="586"><font face="Courier New">
723template &lt;typename iT&gt;<br />
724void <b>insert</b>(iT input_begin, iT input_end)</font></td>
725 <td>Insert objects of an iterator range.&nbsp; Linear wrt.
726inserted vertices.</td>
727 </tr>
728 <tr>
729 <td width="586"><font face="Courier New">
730void <b>insert</b>(const polygon_90_set_data&amp; polygon_set)</font></td>
731 <td>Insert a polygon set.&nbsp; Linear wrt. inserted
732vertices.</td>
733 </tr>
734 <tr>
735 <td width="586"><font face="Courier New">
736template &lt;typename geometry_type&gt;<br />
737void <b>insert</b>(const geometry_type&amp; geometry_object, <br />
738&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool
739is_hole = false)</font></td>
740 <td>Insert a geometry object, if is_hole is true then the
741inserted region is subtractive rather than additive.&nbsp; Linear wrt.
742inserted vertices.</td>
743 </tr>
744 <tr>
745 <td width="586"><font face="Courier New">template
746&lt;typename output_container&gt;<br />
747void <b>get</b>(output_container&amp; output) const</font></td>
748 <td>Expects a standard container of geometry objects.&nbsp;
749Will scan and eliminate overlaps.&nbsp; Converts polygon set geometry
750to objects of that type and appends them to the container.&nbsp;
751Polygons will be output with counterclockwise winding, hole polygons
752will be output with clockwise winding.&nbsp; The last vertex of an
753output polygon is not the duplicate of the first, and the number of
754points is equal to the number of edges.&nbsp; O( n log n) runtime
755complexity and O(n) memory wrt vertices + intersections.</td>
756 </tr>
757 <tr>
758 <td style="vertical-align: top;"><font face="Courier New">template
759&lt;typename output_container&gt;<br />
760void <b>get</b>(output_container&amp; output, size_t k) const</font></td>
761 <td style="vertical-align: top;">Expects a standard
762container of geometry objects.&nbsp; Will scan and eliminate
763overlaps.&nbsp; Converts polygon set geometry to objects of that type
764and appends them to the container.&nbsp; The resulting polygons will
765have at most k vertices. For Manhattan data k should be at least 4 .
766Polygons will be output with counterclockwise winding, hole polygons
767will be output with clockwise winding.&nbsp; The last vertex of an
768output polygon is not the duplicate of the first, and the number of
769points is equal to the number of edges.&nbsp; O( n log n) runtime
770complexity and O(n) memory wrt vertices + intersections.<br />
771 </td>
772 </tr>
773<tr>
774 <td width="586"><font face="Courier New">template
775&lt;typename output_container&gt;<br />
776void <b>get_polygons</b>(output_container&amp; output) const</font></td>
777 <td>Expects a standard container of polygon objects.&nbsp;
778Will scan and eliminate overlaps.&nbsp; Converts polygon set geometry
779to polygons and appends them to the container.&nbsp; Polygons will have
780holes fractured out to the outer boundary along the positive direction
781of the scanline orientation of the polygon set.&nbsp; O( n log n)
782runtime complexity and O(n) memory wrt vertices + intersections.</td>
783 </tr>
784 <tr>
785 <td width="586"><font face="Courier New">template
786&lt;typename output_container&gt;<br />
787void <b>get_rectangles</b>(output_container&amp; output) const</font></td>
788 <td>Expects a standard container of rectangle
789objects.&nbsp; Will scan and eliminate overlaps.&nbsp; Slices polygon
790set geometry to rectangles along the scanning orientation and appends
791them to the container.&nbsp; O( n log n) runtime complexity and O(n)
792memory wrt vertices + intersections.</td>
793 </tr>
794 <tr>
795 <td width="586"><font face="Courier New">
796template &lt;typename output_container&gt;<br />
797void <b>get_rectangles</b>(output_container&amp; output, <br />
798&nbsp; orientation_2d slicing_orientation) const </font> </td>
799 <td>Expects a standard container of rectangle
800objects.&nbsp; Will scan and eliminate overlaps.&nbsp; Slices polygon
801set geometry to rectangles along the given orientation and appends them
802to the container.&nbsp; O( n log n) runtime complexity and O(n) memory
803wrt vertices + intersections.</td>
804 </tr>
805 <tr>
806 <td width="586"><font face="Courier New">
807bool <b>operator==</b>(const polygon_90_set_data&amp; p) const</font></td>
808 <td>Once scanned the data representation of geometry within
809a polygon set is in a mathematically canonical form.&nbsp; Comparison
810between two sets is therefore a linear time operation once they are in
811the scanned state. Will scan and eliminate overlaps in both polygon
812sets.&nbsp; O( n log n) runtime complexity and O(n) memory wrt vertices
813+ intersections the first time, linear subsequently.</td>
814 </tr>
815 <tr>
816 <td width="586"><font face="Courier New">bool <b>operator!=</b>(const
817polygon_90_set_data&amp; p) const</font></td>
818 <td>Inverse logic of equivalence operator.</td>
819 </tr>
820 <tr>
821 <td width="586"><font face="Courier New">void <b>clear</b>()</font></td>
822 <td>Make the polygon set empty.&nbsp; Note: does not
823de-allocate memory.&nbsp; Use shrink to fit idiom and assign default
824constructed polygon set to de-allocate.</td>
825 </tr>
826 <tr>
827 <td width="586"><font face="Courier New">bool <b>empty</b>()
828const </font> </td>
829 <td>Check whether the polygon set contains no
830geometry.&nbsp; Will scan and eliminate overlaps because subtractive
831regions might make the polygon set empty.&nbsp; O( n log n) runtime
832complexity and O(n) memory wrt vertices + intersections the first time,
833linear subsequently.</td>
834 </tr>
835 <tr>
836 <td width="586"><font face="Courier New">orientation_2d <b>orient</b>()
837const</font></td>
838 <td>Get the scanning orientation.&nbsp; Depending on the
839data it is sometimes more efficient to scan in a specific
840orientation.&nbsp; This is particularly true of Manhattan geometry
841data.&nbsp; Constant time.</td>
842 </tr>
843 <tr>
844 <td width="586"><font face="Courier New">void <b>clean</b>()
845const</font></td>
846 <td>Scan and eliminate overlaps.&nbsp; O( n log n) runtime
847complexity and O(n) memory wrt vertices + intersections the first time,
848constant time subsequently.</td>
849 </tr>
850 <tr>
851 <td width="586"><font face="Courier New">template
852&lt;typename input_iterator_type&gt;<br />
853void <b>set</b>(input_iterator_type input_begin, <br />
854&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input_iterator_type
855input_end, <br />
856&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orientation_2d orient)
857 </font> </td>
858 <td>Overwrite geometry in polygon set with insertable
859objects in the iterator range.&nbsp; Also sets the scanning orientation
860to that specified.</td>
861 </tr>
862 <tr>
863 <td width="586"><font face="Courier New">template
864&lt;typename rectangle_type&gt;<br />
865bool <b>extents</b>(rectangle_type&amp; extents_rectangle) const</font></td>
866 <td>Given an object that models rectangle, scans and
867eliminates overlaps in the polygon set because subtractive regions may
868alter its extents then computes the bounding box and assigns it to
869extents_rectangle.&nbsp; O( n log n) runtime complexity and O(n) memory
870wrt vertices + intersections the first time, linear subsequently.</td>
871 </tr>
872 <tr>
873 <td width="586"><font face="Courier New">polygon_90_set_data&amp;<br />
874 <b>bloat</b>(unsigned_area_type west_bloating,<br />
875&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
876unsigned_area_type east_bloating,<br />
877&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
878unsigned_area_type south_bloating,<br />
879&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
880unsigned_area_type north_bloating) </font></td>
881 <td>Scans to eliminate overlaps and subtractive
882regions.&nbsp; Inserts rectangles of width specified by bloating values
883to the indicated side of geometry within the polygon set and fills
884corners with rectangles of the length and width specified for the
885adjacent sides.&nbsp; O( n log n) runtime complexity and O(n) memory
886wrt vertices + intersections.</td>
887 </tr>
888 <tr>
889 <td width="586"><font face="Courier New">polygon_90_set_data&amp;<br />
890 <b>shrink</b>(unsigned_area_type west_shrinking,<br />
891&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
892unsigned_area_type east_shrinking,<br />
893&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
894unsigned_area_type south_shrinking,<br />
895&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
896unsigned_area_type north_shrinking)</font></td>
897 <td>Scans to eliminate overlaps and subtractive
898regions.&nbsp; Inserts subtractiive rectangles of width specified by
899bloating values to the indicated side of geometry within the polygon
900set and subtractive rectangle at convex corners of the length and width
901specified for the adjacent sides.&nbsp; Scans to eliminate overlapping
902subtractive regions.&nbsp; O( n log n) runtime complexity and O(n)
903memory wrt vertices + intersections.</td>
904 </tr>
905 <tr>
906 <td width="586"><font face="Courier New">polygon_90_set_data&amp;<br />
907 <b>resize</b>(coordinate_type west, coordinate_type east, <br />
908&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coordinate_type south,
909coordinate_type north)</font></td>
910 <td>Call bloat or shrink or shrink then bloat depending on
911whether the resizing values are positive or negative.&nbsp; O( n log n)
912runtime complexity and O(n) memory wrt vertices + intersections.</td>
913 </tr>
914 <tr>
915 <td width="586"><font face="Courier New">polygon_90_set_data&amp;
916 <b>move</b>(coordinate_type x_delta, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
917coordinate_type y_delta) </font> </td>
918 <td>Add x_delta to x values and y_delta to y values of
919vertices stored within the polygon set.&nbsp; Linear wrt. vertices.</td>
920 </tr>
921 <tr>
922 <td width="586"><font face="Courier New">template
923&lt;typename transformation_type&gt;<br />
924polygon_90_set_data&amp; <br />
925 <b>transform</b>(const transformation_type&amp;
926transformation) </font> </td>
927 <td>Applies transformation.transform() on vertices stored
928within the polygon set.&nbsp; Linear wrt. vertices.</td>
929 </tr>
930 <tr>
931 <td width="586"><font face="Courier New">polygon_90_set_data&amp;
932 <b>scale_up</b>(unsigned_area_type factor)</font></td>
933 <td>Scales vertices stored within the polygon set up by
934factor.&nbsp; Linear wrt. vertices.</td>
935 </tr>
936 <tr>
937 <td width="586">
938 <p><font face="Courier New">polygon_90_set_data&amp; <b>scale_down</b>(unsigned_area_type
939factor)</font>&nbsp;</p>
940 </td>
941 <td>Scales vertices stored within the polygon set down by
942factor.&nbsp; Linear wrt. vertices.</td>
943 </tr>
944 <tr>
945 <td width="586"><font face="Courier New">template
946&lt;typename scaling_type&gt;<br />
947polygon_90_set_data&amp;<br />
948 <b>scale</b>(const
949anisotropic_scale_factor&lt;scaling_type&gt;&amp; f)</font></td>
950 <td>Scales vertices stored within the polygon set by
951applying f.scale().&nbsp; Linear wrt. vertices.</td>
952 </tr>
953 <tr>
954 <td width="586"><font face="Courier New">polygon_90_set_data&amp;
955 <b>scale</b>(double factor) </font></td>
956 <td>Scales vertices stored within the polygon set by
957floating point factor.&nbsp; Linear wrt. vertices.</td>
958 </tr>
959 <tr>
960 <td width="586"><font face="Courier New">polygon_90_set_data&amp;
961 <b>self_xor</b>()</font></td>
962 <td>Retain only non-overlapping regions of geometry within
963polygon set.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
964vertices + intersections.</td>
965 </tr>
966 <tr>
967 <td width="586"><font face="Courier New">polygon_90_set_data&amp;
968 <b>self_intersect</b>()</font></td>
969 <td>Retain only overlapping regions of geometry within a
970polygon set.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
971vertices + intersections.</td>
972 </tr>
973 <tr>
974 <td width="586"><font face="Courier New">polygon_90_set_data&amp;<br />
975 <b>interact</b>(const polygon_90_set_data&amp; that)</font></td>
976 <td>Retain only regions that touch or overlap regions in
977argument.&nbsp; O( n log n) runtime complexity and O(n) memory wrt
978vertices + intersections.</td>
979 </tr>
980 </tbody>
981 </table>
982 </td>
983 </tr>
984 <tr>
985 <td style="background-color: rgb(238, 238, 238);" nowrap="1" valign="top"> &nbsp;</td>
986 <td style="padding-left: 10px; padding-right: 10px; padding-bottom: 10px;" valign="top" width="100%">
987 <table class="docinfo" id="table4" frame="void" rules="none">
988 <colgroup> <col class="docinfo-name" /><col class="docinfo-content" /> </colgroup> <tbody valign="top">
989 <tr>
990 <th class="docinfo-name">Copyright:</th>
991