Imported Upstream version 1.64.0
[platform/upstream/boost.git] / libs / geometry / doc / html / geometry / reference / algorithms / correct.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>correct</title>
5 <link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Geometry">
8 <link rel="up" href="../algorithms.html" title="Algorithms">
9 <link rel="prev" href="convex_hull.html" title="convex_hull">
10 <link rel="next" href="covered_by.html" title="covered_by">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="convex_hull.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="covered_by.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h4 class="title">
27 <a name="geometry.reference.algorithms.correct"></a><a class="link" href="correct.html" title="correct">correct</a>
28 </h4></div></div></div>
29 <p>
30           <a class="indexterm" name="idp91699120"></a>
31 Corrects a geometry.
32         </p>
33 <h6>
34 <a name="geometry.reference.algorithms.correct.h0"></a>
35           <span class="phrase"><a name="geometry.reference.algorithms.correct.description"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.description">Description</a>
36         </h6>
37 <p>
38           Corrects a geometry: all rings which are wrongly oriented with respect
39           to their expected orientation are reversed. To all rings which do not have
40           a closing point and are typed as they should have one, the first point
41           is appended. Also boxes can be corrected.
42         </p>
43 <h6>
44 <a name="geometry.reference.algorithms.correct.h1"></a>
45           <span class="phrase"><a name="geometry.reference.algorithms.correct.synopsis"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.synopsis">Synopsis</a>
46         </h6>
47 <p>
48 </p>
49 <pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">&gt;</span>
50 <span class="keyword">void</span> <span class="identifier">correct</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">)</span></pre>
51 <p>
52         </p>
53 <h6>
54 <a name="geometry.reference.algorithms.correct.h2"></a>
55           <span class="phrase"><a name="geometry.reference.algorithms.correct.parameters"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.parameters">Parameters</a>
56         </h6>
57 <div class="informaltable"><table class="table">
58 <colgroup>
59 <col>
60 <col>
61 <col>
62 <col>
63 </colgroup>
64 <thead><tr>
65 <th>
66                   <p>
67                     Type
68                   </p>
69                 </th>
70 <th>
71                   <p>
72                     Concept
73                   </p>
74                 </th>
75 <th>
76                   <p>
77                     Name
78                   </p>
79                 </th>
80 <th>
81                   <p>
82                     Description
83                   </p>
84                 </th>
85 </tr></thead>
86 <tbody><tr>
87 <td>
88                   <p>
89                     Geometry &amp;
90                   </p>
91                 </td>
92 <td>
93                   <p>
94                     Any type fulfilling a Geometry Concept
95                   </p>
96                 </td>
97 <td>
98                   <p>
99                     geometry
100                   </p>
101                 </td>
102 <td>
103                   <p>
104                     A model of the specified concept which will be corrected if necessary
105                   </p>
106                 </td>
107 </tr></tbody>
108 </table></div>
109 <h6>
110 <a name="geometry.reference.algorithms.correct.h3"></a>
111           <span class="phrase"><a name="geometry.reference.algorithms.correct.header"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.header">Header</a>
112         </h6>
113 <p>
114           Either
115         </p>
116 <p>
117           <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
118         </p>
119 <p>
120           Or
121         </p>
122 <p>
123           <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">correct</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
124         </p>
125 <h6>
126 <a name="geometry.reference.algorithms.correct.h4"></a>
127           <span class="phrase"><a name="geometry.reference.algorithms.correct.conformance"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.conformance">Conformance</a>
128         </h6>
129 <p>
130           The function correct is not defined by OGC.
131         </p>
132 <h6>
133 <a name="geometry.reference.algorithms.correct.h5"></a>
134           <span class="phrase"><a name="geometry.reference.algorithms.correct.supported_geometries"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.supported_geometries">Supported
135           geometries</a>
136         </h6>
137 <div class="informaltable"><table class="table">
138 <colgroup>
139 <col>
140 <col>
141 </colgroup>
142 <thead><tr>
143 <th>
144                   <p>
145                     Geometry
146                   </p>
147                 </th>
148 <th>
149                   <p>
150                     Status
151                   </p>
152                 </th>
153 </tr></thead>
154 <tbody>
155 <tr>
156 <td>
157                   <p>
158                     Point
159                   </p>
160                 </td>
161 <td>
162                   <p>
163                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
164                   </p>
165                 </td>
166 </tr>
167 <tr>
168 <td>
169                   <p>
170                     Segment
171                   </p>
172                 </td>
173 <td>
174                   <p>
175                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
176                   </p>
177                 </td>
178 </tr>
179 <tr>
180 <td>
181                   <p>
182                     Box
183                   </p>
184                 </td>
185 <td>
186                   <p>
187                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
188                   </p>
189                 </td>
190 </tr>
191 <tr>
192 <td>
193                   <p>
194                     Linestring
195                   </p>
196                 </td>
197 <td>
198                   <p>
199                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
200                   </p>
201                 </td>
202 </tr>
203 <tr>
204 <td>
205                   <p>
206                     Ring
207                   </p>
208                 </td>
209 <td>
210                   <p>
211                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
212                   </p>
213                 </td>
214 </tr>
215 <tr>
216 <td>
217                   <p>
218                     Polygon
219                   </p>
220                 </td>
221 <td>
222                   <p>
223                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
224                   </p>
225                 </td>
226 </tr>
227 <tr>
228 <td>
229                   <p>
230                     MultiPoint
231                   </p>
232                 </td>
233 <td>
234                   <p>
235                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
236                   </p>
237                 </td>
238 </tr>
239 <tr>
240 <td>
241                   <p>
242                     MultiLinestring
243                   </p>
244                 </td>
245 <td>
246                   <p>
247                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
248                   </p>
249                 </td>
250 </tr>
251 <tr>
252 <td>
253                   <p>
254                     MultiPolygon
255                   </p>
256                 </td>
257 <td>
258                   <p>
259                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
260                   </p>
261                 </td>
262 </tr>
263 <tr>
264 <td>
265                   <p>
266                     Variant
267                   </p>
268                 </td>
269 <td>
270                   <p>
271                     <span class="inlinemediaobject"><img src="../../../img/ok.png" alt="ok"></span>
272                   </p>
273                 </td>
274 </tr>
275 </tbody>
276 </table></div>
277 <h6>
278 <a name="geometry.reference.algorithms.correct.h6"></a>
279           <span class="phrase"><a name="geometry.reference.algorithms.correct.behavior"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.behavior">Behavior</a>
280         </h6>
281 <div class="informaltable"><table class="table">
282 <colgroup>
283 <col>
284 <col>
285 </colgroup>
286 <thead><tr>
287 <th>
288                   <p>
289                     Case
290                   </p>
291                 </th>
292 <th>
293                   <p>
294                     Behavior
295                   </p>
296                 </th>
297 </tr></thead>
298 <tbody>
299 <tr>
300 <td>
301                   <p>
302                     Ring
303                   </p>
304                 </td>
305 <td>
306                   <p>
307                     Ring is corrected
308                   </p>
309                 </td>
310 </tr>
311 <tr>
312 <td>
313                   <p>
314                     Polygon
315                   </p>
316                 </td>
317 <td>
318                   <p>
319                     Polygon is corrected
320                   </p>
321                 </td>
322 </tr>
323 <tr>
324 <td>
325                   <p>
326                     Multi Polygon
327                   </p>
328                 </td>
329 <td>
330                   <p>
331                     Multi Polygon is corrected
332                   </p>
333                 </td>
334 </tr>
335 <tr>
336 <td>
337                   <p>
338                     Box
339                   </p>
340                 </td>
341 <td>
342                   <p>
343                     Box is corrected with respect to minimal and maximal corners
344                   </p>
345                 </td>
346 </tr>
347 <tr>
348 <td>
349                   <p>
350                     Other geometries
351                   </p>
352                 </td>
353 <td>
354                   <p>
355                     Nothing happens, geometry is unchanged
356                   </p>
357                 </td>
358 </tr>
359 </tbody>
360 </table></div>
361 <h6>
362 <a name="geometry.reference.algorithms.correct.h7"></a>
363           <span class="phrase"><a name="geometry.reference.algorithms.correct.complexity"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.complexity">Complexity</a>
364         </h6>
365 <p>
366           Linear
367         </p>
368 <h6>
369 <a name="geometry.reference.algorithms.correct.h8"></a>
370           <span class="phrase"><a name="geometry.reference.algorithms.correct.example"></a></span><a class="link" href="correct.html#geometry.reference.algorithms.correct.example">Example</a>
371         </h6>
372 <p>
373           Shows how to correct a polygon with respect to its orientation and closure
374         </p>
375 <p>
376 </p>
377 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
378
379 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
380 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
381 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
382
383 <span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</span><span class="special">(</span><span class="identifier">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">)</span>
384
385 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
386
387 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
388 <span class="special">{</span>
389     <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">::</span><span class="identifier">tuple_list_of</span><span class="special">;</span>
390
391     <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span>
392         <span class="special">&lt;</span>
393             <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">&gt;</span>
394         <span class="special">&gt;</span> <span class="identifier">clockwise_closed_polygon</span><span class="special">;</span>
395
396     <span class="identifier">clockwise_closed_polygon</span> <span class="identifier">cwcp</span><span class="special">;</span>
397
398     <span class="comment">// Fill it counterclockwise (so wrongly), forgetting the closing point</span>
399     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">exterior_ring</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">tuple_list_of</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">)(</span><span class="number">10</span><span class="special">,</span> <span class="number">10</span><span class="special">)(</span><span class="number">0</span><span class="special">,</span> <span class="number">9</span><span class="special">);</span>
400
401     <span class="comment">// Add a counterclockwise closed inner ring (this is correct)</span>
402     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">interior_rings</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">).</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">tuple_list_of</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">)(</span><span class="number">4</span><span class="special">,</span> <span class="number">6</span><span class="special">)(</span><span class="number">2</span><span class="special">,</span> <span class="number">8</span><span class="special">)(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span>
403
404     <span class="comment">// Its area should be negative (because of wrong orientation)</span>
405     <span class="comment">//     and wrong (because of omitted closing point)</span>
406     <span class="keyword">double</span> <span class="identifier">area_before</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">);</span>
407
408     <span class="comment">// Correct it!</span>
409     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">correct</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">);</span>
410
411     <span class="comment">// Check its new area</span>
412     <span class="keyword">double</span> <span class="identifier">area_after</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">);</span>
413
414     <span class="comment">// And output it</span>
415     <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
416     <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">area_before</span> <span class="special">&lt;&lt;</span> <span class="string">" -&gt; "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area_after</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
417
418     <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
419 <span class="special">}</span>
420 </pre>
421 <p>
422         </p>
423 <p>
424           Output:
425         </p>
426 <pre class="programlisting">(((0, 0), (0, 9), (10, 10), (0, 0)), ((1, 2), (4, 6), (2, 8), (1, 2)))
427 -7 -&gt; 38
428 </pre>
429 </div>
430 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
431 <td align="left"></td>
432 <td align="right"><div class="copyright-footer">Copyright &#169; 2009-2017 Barend
433       Gehrels, Bruno Lalande, Mateusz Loskot, Adam Wulkiewicz, Oracle and/or its
434       affiliates<p>
435         Distributed under the Boost Software License, Version 1.0. (See accompanying
436         file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
437       </p>
438 </div></td>
439 </tr></table>
440 <hr>
441 <div class="spirit-nav">
442 <a accesskey="p" href="convex_hull.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../algorithms.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="covered_by.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
443 </div>
444 </body>
445 </html>