]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Boost.Geometry (aka GGL, Generic Geometry Library) |
2 | // QuickBook Example | |
3 | ||
4 | // Copyright (c) 2011-2012 Barend Gehrels, Amsterdam, the Netherlands. | |
5 | ||
6 | // Use, modification and distribution is subject to the Boost Software License, | |
7 | // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
8 | // http://www.boost.org/LICENSE_1_0.txt) | |
9 | ||
10 | //[difference | |
11 | //` Shows how to subtract one polygon from another polygon | |
12 | ||
13 | #include <iostream> | |
14 | #include <list> | |
15 | ||
16 | #include <boost/geometry.hpp> | |
17 | #include <boost/geometry/geometries/point_xy.hpp> | |
18 | #include <boost/geometry/geometries/polygon.hpp> | |
19 | ||
20 | #include <boost/foreach.hpp> | |
21 | /*<-*/ #include "create_svg_overlay.hpp" /*->*/ | |
22 | ||
23 | int main() | |
24 | { | |
25 | typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon; | |
26 | ||
27 | polygon green, blue; | |
28 | ||
29 | boost::geometry::read_wkt( | |
30 | "POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)" | |
31 | "(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", green); | |
32 | ||
33 | boost::geometry::read_wkt( | |
34 | "POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))", blue); | |
35 | ||
36 | std::list<polygon> output; | |
37 | boost::geometry::difference(green, blue, output); | |
38 | ||
39 | int i = 0; | |
40 | std::cout << "green - blue:" << std::endl; | |
41 | BOOST_FOREACH(polygon const& p, output) | |
42 | { | |
43 | std::cout << i++ << ": " << boost::geometry::area(p) << std::endl; | |
44 | } | |
45 | ||
46 | /*<-*/ create_svg("difference_a.svg", green, blue, output); /*->*/ | |
47 | output.clear(); | |
48 | boost::geometry::difference(blue, green, output); | |
49 | ||
50 | i = 0; | |
51 | std::cout << "blue - green:" << std::endl; | |
52 | BOOST_FOREACH(polygon const& p, output) | |
53 | { | |
54 | std::cout << i++ << ": " << boost::geometry::area(p) << std::endl; | |
55 | } | |
56 | ||
57 | /*<-*/ create_svg("difference_b.svg", green, blue, output); /*->*/ | |
58 | return 0; | |
59 | } | |
60 | ||
61 | //] | |
62 | ||
63 | ||
64 | //[difference_output | |
65 | /*` | |
66 | Output: | |
67 | [pre | |
68 | green - blue: | |
69 | 0: 0.02375 | |
70 | 1: 0.542951 | |
71 | 2: 0.0149697 | |
72 | 3: 0.226855 | |
73 | 4: 0.839424 | |
74 | ||
75 | [$img/algorithms/difference_a.png] | |
76 | ||
77 | blue - green: | |
78 | 0: 0.525154 | |
79 | 1: 0.015 | |
80 | 2: 0.181136 | |
81 | 3: 0.128798 | |
82 | 4: 0.340083 | |
83 | 5: 0.307778 | |
84 | ||
85 | [$img/algorithms/difference_b.png] | |
86 | ] | |
87 | */ | |
88 | //] | |
89 |