Mercurial > hg > orthanc-stone
annotate OrthancStone/UnitTestsSources/ComputationalGeometryTests.cpp @ 1890:6ce81914f7e4
added classes BucketAccumulator1D/2D
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 18 Jan 2022 22:08:55 +0100 |
parents | a2955abe4c2e |
children | 3716d72161d2 |
rev | line source |
---|---|
1872 | 1 /** |
2 * Stone of Orthanc | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium | |
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium | |
7 * | |
8 * This program is free software: you can redistribute it and/or | |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
9 * modify it under the terms of the GNU Lesser General Public License |
1872 | 10 * as published by the Free Software Foundation, either version 3 of |
11 * the License, or (at your option) any later version. | |
12 * | |
13 * This program is distributed in the hope that it will be useful, but | |
14 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
16 * Lesser General Public License for more details. |
1872 | 17 * |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
18 * You should have received a copy of the GNU Lesser General Public |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
19 * License along with this program. If not, see |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
20 * <http://www.gnu.org/licenses/>. |
1872 | 21 **/ |
22 | |
23 | |
24 #include <gtest/gtest.h> | |
25 | |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
26 #include "../Sources/Toolbox/Internals/OrientedIntegerLine2D.h" |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
27 #include "../Sources/Toolbox/Internals/RectanglesIntegerProjection.h" |
1890
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
28 #include "../Sources/Toolbox/LinearAlgebra.h" |
1877
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
29 #include "../Sources/Toolbox/SegmentTree.h" |
a2955abe4c2e
skeleton for the RenderingPlugin
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1876
diff
changeset
|
30 #include "../Sources/Toolbox/UnionOfRectangles.h" |
1872 | 31 |
32 #include <Logging.h> | |
33 #include <OrthancException.h> | |
34 | |
35 | |
36 namespace | |
37 { | |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
38 typedef Orthanc::SingleValueObject<int> Counter; |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
39 |
1872 | 40 class CounterFactory : public OrthancStone::SegmentTree::IPayloadFactory |
41 { | |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
42 private: |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
43 int value_; |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
44 |
1872 | 45 public: |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
46 CounterFactory(int value) : |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
47 value_(value) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
48 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
49 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
50 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
51 virtual Orthanc::IDynamicObject* Create() ORTHANC_OVERRIDE |
1872 | 52 { |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
53 return new Counter(value_); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
54 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
55 }; |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
56 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
57 class IncrementVisitor : public OrthancStone::SegmentTree::IVisitor |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
58 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
59 private: |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
60 int increment_; |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
61 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
62 public: |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
63 IncrementVisitor(int increment) : |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
64 increment_(increment) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
65 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
66 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
67 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
68 virtual void Visit(const OrthancStone::SegmentTree& node, |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
69 bool fullyInside) ORTHANC_OVERRIDE |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
70 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
71 if (fullyInside) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
72 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
73 Counter& payload = node.GetTypedPayload<Counter>(); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
74 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
75 if (payload.GetValue() + increment_ < 0) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
76 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
77 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
78 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
79 else |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
80 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
81 payload.SetValue(payload.GetValue() + increment_); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
82 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
83 } |
1872 | 84 } |
85 }; | |
86 } | |
87 | |
88 | |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
89 TEST(SegmentTree, Create) |
1872 | 90 { |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
91 CounterFactory factory(42); |
1872 | 92 OrthancStone::SegmentTree root(4u, 15u, factory); // Check out Figure 1.1 (page 14) from textbook |
93 | |
94 ASSERT_EQ(4u, root.GetLowBound()); | |
95 ASSERT_EQ(15u, root.GetHighBound()); | |
96 ASSERT_FALSE(root.IsLeaf()); | |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
97 ASSERT_EQ(42, root.GetTypedPayload<Counter>().GetValue()); |
1872 | 98 ASSERT_EQ(21u, root.CountNodes()); |
99 | |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
100 const OrthancStone::SegmentTree* n = &root.GetLeftChild(); |
1872 | 101 ASSERT_EQ(4u, n->GetLowBound()); |
102 ASSERT_EQ(9u, n->GetHighBound()); | |
103 ASSERT_FALSE(n->IsLeaf()); | |
104 ASSERT_EQ(9u, n->CountNodes()); | |
105 | |
106 n = &root.GetLeftChild().GetLeftChild(); | |
107 ASSERT_EQ(4u, n->GetLowBound()); | |
108 ASSERT_EQ(6u, n->GetHighBound()); | |
109 ASSERT_FALSE(n->IsLeaf()); | |
110 ASSERT_EQ(3u, n->CountNodes()); | |
111 | |
112 n = &root.GetLeftChild().GetLeftChild().GetLeftChild(); | |
113 ASSERT_EQ(4u, n->GetLowBound()); | |
114 ASSERT_EQ(5u, n->GetHighBound()); | |
115 ASSERT_TRUE(n->IsLeaf()); | |
116 ASSERT_THROW(n->GetLeftChild(), Orthanc::OrthancException); | |
117 ASSERT_THROW(n->GetRightChild(), Orthanc::OrthancException); | |
118 ASSERT_EQ(1u, n->CountNodes()); | |
119 | |
120 n = &root.GetLeftChild().GetLeftChild().GetRightChild(); | |
121 ASSERT_EQ(5u, n->GetLowBound()); | |
122 ASSERT_EQ(6u, n->GetHighBound()); | |
123 ASSERT_TRUE(n->IsLeaf()); | |
124 ASSERT_EQ(1u, n->CountNodes()); | |
125 | |
126 n = &root.GetLeftChild().GetRightChild(); | |
127 ASSERT_EQ(6u, n->GetLowBound()); | |
128 ASSERT_EQ(9u, n->GetHighBound()); | |
129 ASSERT_FALSE(n->IsLeaf()); | |
130 ASSERT_EQ(5u, n->CountNodes()); | |
131 | |
132 n = &root.GetLeftChild().GetRightChild().GetLeftChild(); | |
133 ASSERT_EQ(6u, n->GetLowBound()); | |
134 ASSERT_EQ(7u, n->GetHighBound()); | |
135 ASSERT_TRUE(n->IsLeaf()); | |
136 ASSERT_EQ(1u, n->CountNodes()); | |
137 | |
138 n = &root.GetLeftChild().GetRightChild().GetRightChild(); | |
139 ASSERT_EQ(7u, n->GetLowBound()); | |
140 ASSERT_EQ(9u, n->GetHighBound()); | |
141 ASSERT_FALSE(n->IsLeaf()); | |
142 ASSERT_EQ(3u, n->CountNodes()); | |
143 | |
144 n = &root.GetLeftChild().GetRightChild().GetRightChild().GetLeftChild(); | |
145 ASSERT_EQ(7u, n->GetLowBound()); | |
146 ASSERT_EQ(8u, n->GetHighBound()); | |
147 ASSERT_TRUE(n->IsLeaf()); | |
148 ASSERT_EQ(1u, n->CountNodes()); | |
149 | |
150 n = &root.GetLeftChild().GetRightChild().GetRightChild().GetRightChild(); | |
151 ASSERT_EQ(8u, n->GetLowBound()); | |
152 ASSERT_EQ(9u, n->GetHighBound()); | |
153 ASSERT_TRUE(n->IsLeaf()); | |
154 ASSERT_EQ(1u, n->CountNodes()); | |
155 | |
156 n = &root.GetRightChild(); | |
157 ASSERT_EQ(9u, n->GetLowBound()); | |
158 ASSERT_EQ(15u, n->GetHighBound()); | |
159 ASSERT_FALSE(n->IsLeaf()); | |
160 ASSERT_EQ(11u, n->CountNodes()); | |
161 | |
162 n = &root.GetRightChild().GetLeftChild(); | |
163 ASSERT_EQ(9u, n->GetLowBound()); | |
164 ASSERT_EQ(12u, n->GetHighBound()); | |
165 ASSERT_FALSE(n->IsLeaf()); | |
166 ASSERT_EQ(5u, n->CountNodes()); | |
167 | |
168 n = &root.GetRightChild().GetLeftChild().GetLeftChild(); | |
169 ASSERT_EQ(9u, n->GetLowBound()); | |
170 ASSERT_EQ(10u, n->GetHighBound()); | |
171 ASSERT_TRUE(n->IsLeaf()); | |
172 ASSERT_EQ(1u, n->CountNodes()); | |
173 | |
174 n = &root.GetRightChild().GetLeftChild().GetRightChild(); | |
175 ASSERT_EQ(10u, n->GetLowBound()); | |
176 ASSERT_EQ(12u, n->GetHighBound()); | |
177 ASSERT_FALSE(n->IsLeaf()); | |
178 ASSERT_EQ(3u, n->CountNodes()); | |
179 | |
180 n = &root.GetRightChild().GetLeftChild().GetRightChild().GetLeftChild(); | |
181 ASSERT_EQ(10u, n->GetLowBound()); | |
182 ASSERT_EQ(11u, n->GetHighBound()); | |
183 ASSERT_TRUE(n->IsLeaf()); | |
184 ASSERT_EQ(1u, n->CountNodes()); | |
185 | |
186 n = &root.GetRightChild().GetLeftChild().GetRightChild().GetRightChild(); | |
187 ASSERT_EQ(11u, n->GetLowBound()); | |
188 ASSERT_EQ(12u, n->GetHighBound()); | |
189 ASSERT_TRUE(n->IsLeaf()); | |
190 ASSERT_EQ(1u, n->CountNodes()); | |
191 | |
192 n = &root.GetRightChild().GetRightChild(); | |
193 ASSERT_EQ(12u, n->GetLowBound()); | |
194 ASSERT_EQ(15u, n->GetHighBound()); | |
195 ASSERT_FALSE(n->IsLeaf()); | |
196 ASSERT_EQ(5u, n->CountNodes()); | |
197 | |
198 n = &root.GetRightChild().GetRightChild().GetLeftChild(); | |
199 ASSERT_EQ(12u, n->GetLowBound()); | |
200 ASSERT_EQ(13u, n->GetHighBound()); | |
201 ASSERT_TRUE(n->IsLeaf()); | |
202 ASSERT_EQ(1u, n->CountNodes()); | |
203 | |
204 n = &root.GetRightChild().GetRightChild().GetRightChild(); | |
205 ASSERT_EQ(13u, n->GetLowBound()); | |
206 ASSERT_EQ(15u, n->GetHighBound()); | |
207 ASSERT_FALSE(n->IsLeaf()); | |
208 ASSERT_EQ(3u, n->CountNodes()); | |
209 | |
210 n = &root.GetRightChild().GetRightChild().GetRightChild().GetLeftChild(); | |
211 ASSERT_EQ(13u, n->GetLowBound()); | |
212 ASSERT_EQ(14u, n->GetHighBound()); | |
213 ASSERT_TRUE(n->IsLeaf()); | |
214 ASSERT_EQ(1u, n->CountNodes()); | |
215 | |
216 n = &root.GetRightChild().GetRightChild().GetRightChild().GetRightChild(); | |
217 ASSERT_EQ(14u, n->GetLowBound()); | |
218 ASSERT_EQ(15u, n->GetHighBound()); | |
219 ASSERT_TRUE(n->IsLeaf()); | |
220 ASSERT_EQ(1u, n->CountNodes()); | |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
221 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
222 ASSERT_TRUE(root.FindLeaf(3) == NULL); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
223 for (size_t i = 4; i < 15; i++) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
224 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
225 n = root.FindLeaf(i); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
226 ASSERT_TRUE(n != NULL); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
227 ASSERT_TRUE(n->IsLeaf()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
228 ASSERT_EQ(i, n->GetLowBound()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
229 ASSERT_EQ(i + 1, n->GetHighBound()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
230 ASSERT_EQ(42, n->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
231 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
232 ASSERT_TRUE(root.FindLeaf(15) == NULL); |
1872 | 233 } |
1873
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
234 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
235 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
236 static bool CheckCounter(const OrthancStone::SegmentTree& node, |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
237 int expectedValue) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
238 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
239 if (node.GetTypedPayload<Counter>().GetValue() != expectedValue) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
240 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
241 return false; |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
242 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
243 else if (node.IsLeaf()) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
244 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
245 return true; |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
246 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
247 else |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
248 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
249 return (CheckCounter(node.GetLeftChild(), expectedValue) && |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
250 CheckCounter(node.GetRightChild(), expectedValue)); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
251 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
252 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
253 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
254 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
255 #if 0 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
256 static void Print(const OrthancStone::SegmentTree& node, |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
257 unsigned int indent) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
258 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
259 for (size_t i = 0; i < indent; i++) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
260 printf(" "); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
261 printf("(%lu,%lu): %d\n", node.GetLowBound(), node.GetHighBound(), node.GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
262 if (!node.IsLeaf()) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
263 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
264 Print(node.GetLeftChild(), indent + 1); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
265 Print(node.GetRightChild(), indent + 1); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
266 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
267 } |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
268 #endif |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
269 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
270 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
271 TEST(SegmentTree, Visit) |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
272 { |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
273 CounterFactory factory(0); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
274 OrthancStone::SegmentTree root(4u, 15u, factory); // Check out Figure 1.1 (page 14) from textbook |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
275 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
276 ASSERT_TRUE(CheckCounter(root, 0)); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
277 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
278 IncrementVisitor plus(1); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
279 IncrementVisitor minus(-1); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
280 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
281 root.VisitSegment(0, 20, plus); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
282 ASSERT_EQ(1, root.GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
283 ASSERT_TRUE(CheckCounter(root.GetLeftChild(), 0)); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
284 ASSERT_TRUE(CheckCounter(root.GetRightChild(), 0)); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
285 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
286 root.VisitSegment(0, 20, plus); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
287 ASSERT_EQ(2, root.GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
288 ASSERT_TRUE(CheckCounter(root.GetLeftChild(), 0)); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
289 ASSERT_TRUE(CheckCounter(root.GetRightChild(), 0)); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
290 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
291 root.VisitSegment(0, 20, minus); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
292 root.VisitSegment(0, 20, minus); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
293 ASSERT_TRUE(CheckCounter(root, 0)); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
294 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
295 root.VisitSegment(8, 11, plus); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
296 ASSERT_EQ(0, root.FindNode(4, 15)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
297 ASSERT_EQ(0, root.FindNode(4, 9)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
298 ASSERT_EQ(0, root.FindNode(4, 6)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
299 ASSERT_EQ(0, root.FindNode(4, 5)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
300 ASSERT_EQ(0, root.FindNode(5, 6)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
301 ASSERT_EQ(0, root.FindNode(6, 9)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
302 ASSERT_EQ(0, root.FindNode(6, 7)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
303 ASSERT_EQ(0, root.FindNode(7, 9)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
304 ASSERT_EQ(0, root.FindNode(7, 8)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
305 ASSERT_EQ(1, root.FindNode(8, 9)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
306 ASSERT_EQ(0, root.FindNode(9, 15)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
307 ASSERT_EQ(0, root.FindNode(9, 12)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
308 ASSERT_EQ(1, root.FindNode(9, 10)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
309 ASSERT_EQ(0, root.FindNode(10, 12)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
310 ASSERT_EQ(1, root.FindNode(10, 11)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
311 ASSERT_EQ(0, root.FindNode(11, 12)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
312 ASSERT_EQ(0, root.FindNode(12, 15)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
313 ASSERT_EQ(0, root.FindNode(12, 13)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
314 ASSERT_EQ(0, root.FindNode(13, 15)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
315 ASSERT_EQ(0, root.FindNode(13, 14)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
316 ASSERT_EQ(0, root.FindNode(14, 15)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
317 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
318 root.VisitSegment(9, 11, minus); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
319 ASSERT_EQ(0, root.FindNode(4, 15)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
320 ASSERT_EQ(0, root.FindNode(4, 9)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
321 ASSERT_EQ(0, root.FindNode(4, 6)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
322 ASSERT_EQ(0, root.FindNode(4, 5)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
323 ASSERT_EQ(0, root.FindNode(5, 6)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
324 ASSERT_EQ(0, root.FindNode(6, 9)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
325 ASSERT_EQ(0, root.FindNode(6, 7)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
326 ASSERT_EQ(0, root.FindNode(7, 9)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
327 ASSERT_EQ(0, root.FindNode(7, 8)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
328 ASSERT_EQ(1, root.FindNode(8, 9)->GetTypedPayload<Counter>().GetValue()); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
329 ASSERT_TRUE(CheckCounter(root.GetRightChild(), 0)); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
330 |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
331 root.VisitSegment(8, 9, minus); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
332 ASSERT_TRUE(CheckCounter(root, 0)); |
e0966648ebd0
unit tests of SegmentTree
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1872
diff
changeset
|
333 } |
1874
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
334 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
335 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
336 TEST(UnionOfRectangles, RectanglesIntegerProjection) |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
337 { |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
338 std::list<OrthancStone::Extent2D> rectangles; |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
339 rectangles.push_back(OrthancStone::Extent2D(10, 20, 30, 40)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
340 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
341 { |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
342 OrthancStone::Internals::RectanglesIntegerProjection h(rectangles, true); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
343 ASSERT_EQ(2u, h.GetEndpointsCount()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
344 ASSERT_EQ(10, h.GetEndpointCoordinate(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
345 ASSERT_EQ(30, h.GetEndpointCoordinate(1)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
346 ASSERT_EQ(1u, h.GetProjectedRectanglesCount()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
347 ASSERT_EQ(0u, h.GetProjectedRectangleLow(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
348 ASSERT_EQ(1u, h.GetProjectedRectangleHigh(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
349 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
350 ASSERT_THROW(h.GetEndpointCoordinate(2), Orthanc::OrthancException); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
351 ASSERT_THROW(h.GetProjectedRectangleLow(1), Orthanc::OrthancException); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
352 ASSERT_THROW(h.GetProjectedRectangleHigh(1), Orthanc::OrthancException); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
353 } |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
354 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
355 { |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
356 OrthancStone::Internals::RectanglesIntegerProjection h(rectangles, false); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
357 ASSERT_EQ(2u, h.GetEndpointsCount()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
358 ASSERT_EQ(20, h.GetEndpointCoordinate(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
359 ASSERT_EQ(40, h.GetEndpointCoordinate(1)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
360 ASSERT_EQ(1u, h.GetProjectedRectanglesCount()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
361 ASSERT_EQ(0u, h.GetProjectedRectangleLow(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
362 ASSERT_EQ(1u, h.GetProjectedRectangleHigh(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
363 } |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
364 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
365 rectangles.push_back(OrthancStone::Extent2D(20, 30, 40, 50)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
366 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
367 { |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
368 OrthancStone::Internals::RectanglesIntegerProjection h(rectangles, true); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
369 ASSERT_EQ(4u, h.GetEndpointsCount()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
370 ASSERT_EQ(10, h.GetEndpointCoordinate(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
371 ASSERT_EQ(20, h.GetEndpointCoordinate(1)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
372 ASSERT_EQ(30, h.GetEndpointCoordinate(2)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
373 ASSERT_EQ(40, h.GetEndpointCoordinate(3)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
374 ASSERT_EQ(2u, h.GetProjectedRectanglesCount()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
375 ASSERT_EQ(0u, h.GetProjectedRectangleLow(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
376 ASSERT_EQ(2u, h.GetProjectedRectangleHigh(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
377 ASSERT_EQ(1u, h.GetProjectedRectangleLow(1)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
378 ASSERT_EQ(3u, h.GetProjectedRectangleHigh(1)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
379 } |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
380 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
381 { |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
382 OrthancStone::Internals::RectanglesIntegerProjection h(rectangles, false); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
383 ASSERT_EQ(4u, h.GetEndpointsCount()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
384 ASSERT_EQ(20, h.GetEndpointCoordinate(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
385 ASSERT_EQ(30, h.GetEndpointCoordinate(1)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
386 ASSERT_EQ(40, h.GetEndpointCoordinate(2)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
387 ASSERT_EQ(50, h.GetEndpointCoordinate(3)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
388 ASSERT_EQ(2u, h.GetProjectedRectanglesCount()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
389 ASSERT_EQ(0u, h.GetProjectedRectangleLow(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
390 ASSERT_EQ(2u, h.GetProjectedRectangleHigh(0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
391 ASSERT_EQ(1u, h.GetProjectedRectangleLow(1)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
392 ASSERT_EQ(3u, h.GetProjectedRectangleHigh(1)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
393 } |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
394 } |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
395 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
396 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
397 static void Convert(std::vector<size_t>& horizontal, |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
398 std::vector<size_t>& vertical, |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
399 const OrthancStone::Internals::OrientedIntegerLine2D::Chain& chain) |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
400 { |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
401 horizontal.clear(); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
402 vertical.clear(); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
403 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
404 for (OrthancStone::Internals::OrientedIntegerLine2D::Chain::const_iterator |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
405 it = chain.begin(); it != chain.end(); ++it) |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
406 { |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
407 horizontal.push_back(it->first); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
408 vertical.push_back(it->second); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
409 } |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
410 } |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
411 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
412 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
413 TEST(UnionOfRectangles, ExtractChains) |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
414 { |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
415 std::vector<OrthancStone::Internals::OrientedIntegerLine2D> edges; |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
416 edges.push_back(OrthancStone::Internals::OrientedIntegerLine2D(0, 0, 10, 0)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
417 edges.push_back(OrthancStone::Internals::OrientedIntegerLine2D(10, 0, 10, 20)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
418 edges.push_back(OrthancStone::Internals::OrientedIntegerLine2D(10, 20, 0, 20)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
419 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
420 std::list<OrthancStone::Internals::OrientedIntegerLine2D::Chain> chains; |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
421 OrthancStone::Internals::OrientedIntegerLine2D::ExtractChains(chains, edges); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
422 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
423 std::vector<size_t> h, v; |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
424 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
425 ASSERT_EQ(1u, chains.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
426 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
427 Convert(h, v, chains.front()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
428 ASSERT_EQ(4u, h.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
429 ASSERT_EQ(0u, h[0]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
430 ASSERT_EQ(10u, h[1]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
431 ASSERT_EQ(10u, h[2]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
432 ASSERT_EQ(0u, h[3]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
433 ASSERT_EQ(4u, v.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
434 ASSERT_EQ(0u, v[0]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
435 ASSERT_EQ(0u, v[1]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
436 ASSERT_EQ(20u, v[2]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
437 ASSERT_EQ(20u, v[3]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
438 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
439 edges.push_back(OrthancStone::Internals::OrientedIntegerLine2D(5, 5, 10, 5)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
440 OrthancStone::Internals::OrientedIntegerLine2D::ExtractChains(chains, edges); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
441 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
442 ASSERT_EQ(2u, chains.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
443 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
444 Convert(h, v, chains.front()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
445 ASSERT_EQ(4u, h.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
446 ASSERT_EQ(0u, h[0]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
447 ASSERT_EQ(10u, h[1]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
448 ASSERT_EQ(10u, h[2]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
449 ASSERT_EQ(0u, h[3]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
450 ASSERT_EQ(4u, v.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
451 ASSERT_EQ(0u, v[0]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
452 ASSERT_EQ(0u, v[1]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
453 ASSERT_EQ(20u, v[2]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
454 ASSERT_EQ(20u, v[3]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
455 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
456 Convert(h, v, chains.back()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
457 ASSERT_EQ(2u, h.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
458 ASSERT_EQ(5u, h[0]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
459 ASSERT_EQ(10u, h[1]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
460 ASSERT_EQ(2u, v.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
461 ASSERT_EQ(5u, v[0]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
462 ASSERT_EQ(5u, v[1]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
463 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
464 edges.push_back(OrthancStone::Internals::OrientedIntegerLine2D(0, 20, 5, 5)); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
465 OrthancStone::Internals::OrientedIntegerLine2D::ExtractChains(chains, edges); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
466 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
467 ASSERT_EQ(1u, chains.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
468 |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
469 Convert(h, v, chains.front()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
470 ASSERT_EQ(6u, h.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
471 ASSERT_EQ(0u, h[0]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
472 ASSERT_EQ(10u, h[1]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
473 ASSERT_EQ(10u, h[2]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
474 ASSERT_EQ(0u, h[3]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
475 ASSERT_EQ(5u, h[4]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
476 ASSERT_EQ(10u, h[5]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
477 ASSERT_EQ(6u, v.size()); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
478 ASSERT_EQ(0u, v[0]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
479 ASSERT_EQ(0u, v[1]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
480 ASSERT_EQ(20u, v[2]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
481 ASSERT_EQ(20u, v[3]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
482 ASSERT_EQ(5u, v[4]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
483 ASSERT_EQ(5u, v[5]); |
08f2476e8f5e
added classes OrientedIntegerLine2D and RectanglesIntegerProjection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1873
diff
changeset
|
484 } |
1875
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
485 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
486 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
487 TEST(UnionOfRectangles, Textbook) |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
488 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
489 // This is Figure 8.12 from textbook |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
490 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
491 std::list<OrthancStone::Extent2D> rectangles; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
492 rectangles.push_back(OrthancStone::Extent2D(1, 3, 13, 5)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
493 rectangles.push_back(OrthancStone::Extent2D(3, 1, 7, 12)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
494 rectangles.push_back(OrthancStone::Extent2D(5, 7, 11, 10)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
495 rectangles.push_back(OrthancStone::Extent2D(10, 2, 14, 8)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
496 rectangles.push_back(OrthancStone::Extent2D(3, 3, 4, 3)); // empty rectangle |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
497 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
498 for (unsigned int fillHole = 0; fillHole < 2; fillHole++) |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
499 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
500 if (fillHole) |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
501 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
502 rectangles.push_back(OrthancStone::Extent2D(6.5, 4.5, 10.5, 7.5)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
503 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
504 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
505 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
506 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
507 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
508 ASSERT_EQ(fillHole ? 1u : 2u, contours.size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
509 ASSERT_EQ(17u, contours.front().size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
510 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(3, 12))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
511 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(7, 12))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
512 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(7, 10))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
513 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(11, 10))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
514 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(11, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
515 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(14, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
516 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(14, 2))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
517 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(10, 2))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
518 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(10, 3))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
519 ASSERT_TRUE(contours.front()[9].IsEqual(OrthancStone::ScenePoint2D(7, 3))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
520 ASSERT_TRUE(contours.front()[10].IsEqual(OrthancStone::ScenePoint2D(7, 1))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
521 ASSERT_TRUE(contours.front()[11].IsEqual(OrthancStone::ScenePoint2D(3, 1))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
522 ASSERT_TRUE(contours.front()[12].IsEqual(OrthancStone::ScenePoint2D(3, 3))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
523 ASSERT_TRUE(contours.front()[13].IsEqual(OrthancStone::ScenePoint2D(1, 3))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
524 ASSERT_TRUE(contours.front()[14].IsEqual(OrthancStone::ScenePoint2D(1, 5))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
525 ASSERT_TRUE(contours.front()[15].IsEqual(OrthancStone::ScenePoint2D(3, 5))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
526 ASSERT_TRUE(contours.front()[16].IsEqual(OrthancStone::ScenePoint2D(3, 12))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
527 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
528 if (!fillHole) |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
529 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
530 ASSERT_EQ(5u, contours.back().size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
531 ASSERT_TRUE(contours.back()[0].IsEqual(OrthancStone::ScenePoint2D(10, 7))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
532 ASSERT_TRUE(contours.back()[1].IsEqual(OrthancStone::ScenePoint2D(7, 7))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
533 ASSERT_TRUE(contours.back()[2].IsEqual(OrthancStone::ScenePoint2D(7, 5))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
534 ASSERT_TRUE(contours.back()[3].IsEqual(OrthancStone::ScenePoint2D(10, 5))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
535 ASSERT_TRUE(contours.back()[4].IsEqual(OrthancStone::ScenePoint2D(10, 7))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
536 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
537 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
538 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
539 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
540 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
541 #if 0 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
542 static void SaveSvg(const std::list< std::vector<OrthancStone::ScenePoint2D> >& contours) |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
543 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
544 float ww = 15; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
545 float hh = 13; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
546 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
547 FILE* fp = fopen("test.svg", "w"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
548 fprintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
549 fprintf(fp, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
550 fprintf(fp, "<svg width=\"%f\" height=\"%f\" viewBox=\"0 0 %f %f\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", 100.0f*ww, 100.0f*hh, ww, hh); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
551 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
552 // http://thenewcode.com/1068/Making-Arrows-in-SVG |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
553 fprintf(fp, "<defs>\n"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
554 fprintf(fp, "<marker id=\"arrowhead\" markerWidth=\"2\" markerHeight=\"3\" \n"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
555 fprintf(fp, "refX=\"2\" refY=\"1.5\" orient=\"auto\">\n"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
556 fprintf(fp, "<polygon points=\"0 0, 2 1.5, 0 3\" />\n"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
557 fprintf(fp, "</marker>\n"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
558 fprintf(fp, "</defs>\n"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
559 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
560 fprintf(fp, "<rect fill=\"#fff\" stroke=\"#000\" x=\"0\" y=\"0\" width=\"%f\" height=\"%f\"/>\n", ww, hh); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
561 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
562 for (std::list< std::vector<OrthancStone::ScenePoint2D> >::const_iterator |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
563 it = contours.begin(); it != contours.end(); ++it) |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
564 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
565 for (size_t i = 0; i + 1 < it->size(); i++) |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
566 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
567 float x1 = (*it)[i].GetX(); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
568 float x2 = (*it)[i + 1].GetX(); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
569 float y1 = (*it)[i].GetY(); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
570 float y2 = (*it)[i + 1].GetY(); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
571 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
572 fprintf(fp, "<line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" stroke=\"blue\" stroke-width=\"0.05\" marker-end=\"url(#arrowhead)\"/>\n", x1, y1, x2, y2); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
573 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
574 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
575 fprintf(fp, "</svg>\n"); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
576 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
577 fclose(fp); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
578 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
579 #endif |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
580 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
581 |
1876 | 582 TEST(UnionOfRectangles, EdgeCases) |
1875
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
583 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
584 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
585 std::list<OrthancStone::Extent2D> rectangles; |
1876 | 586 |
587 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
588 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
589 | |
590 ASSERT_EQ(0u, contours.size()); | |
591 } | |
592 | |
593 { | |
594 std::list<OrthancStone::Extent2D> rectangles; | |
595 rectangles.push_back(OrthancStone::Extent2D(3, 3, 4, 3)); // empty rectangle | |
596 | |
597 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
598 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
599 | |
600 ASSERT_EQ(0u, contours.size()); | |
601 } | |
602 | |
603 { | |
604 std::list<OrthancStone::Extent2D> rectangles; | |
605 rectangles.push_back(OrthancStone::Extent2D(1, 1, 2, 2)); | |
606 | |
607 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
608 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
609 | |
610 ASSERT_EQ(1u, contours.size()); | |
611 ASSERT_EQ(5u, contours.front().size()); | |
612 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
613 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
614 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(2, 1))); | |
615 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(1, 1))); | |
616 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
617 } | |
618 | |
619 { | |
620 std::list<OrthancStone::Extent2D> rectangles; | |
621 rectangles.push_back(OrthancStone::Extent2D(1, 1, 2, 2)); | |
622 rectangles.push_back(OrthancStone::Extent2D(1, 3, 2, 4)); | |
623 | |
624 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
625 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
626 | |
627 ASSERT_EQ(2u, contours.size()); | |
628 | |
629 ASSERT_EQ(5u, contours.front().size()); | |
630 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
631 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
632 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
633 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
634 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
635 | |
636 ASSERT_EQ(5u, contours.back().size()); | |
637 ASSERT_TRUE(contours.back()[0].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
638 ASSERT_TRUE(contours.back()[1].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
639 ASSERT_TRUE(contours.back()[2].IsEqual(OrthancStone::ScenePoint2D(2, 1))); | |
640 ASSERT_TRUE(contours.back()[3].IsEqual(OrthancStone::ScenePoint2D(1, 1))); | |
641 ASSERT_TRUE(contours.back()[4].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
642 } | |
643 | |
644 { | |
645 std::list<OrthancStone::Extent2D> rectangles; | |
1875
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
646 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
647 rectangles.push_back(OrthancStone::Extent2D(4, 6, 7, 8)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
648 rectangles.push_back(OrthancStone::Extent2D(4, 2, 7, 4)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
649 rectangles.push_back(OrthancStone::Extent2D(7, 4, 10, 6)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
650 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
651 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
652 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
653 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
654 ASSERT_EQ(1u, contours.size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
655 ASSERT_EQ(17u, contours.front().size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
656 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(4, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
657 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(7, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
658 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(7, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
659 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(10, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
660 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(10, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
661 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(7, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
662 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(7, 2))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
663 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(4, 2))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
664 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(4, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
665 ASSERT_TRUE(contours.front()[9].IsEqual(OrthancStone::ScenePoint2D(7, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
666 ASSERT_TRUE(contours.front()[10].IsEqual(OrthancStone::ScenePoint2D(7, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
667 ASSERT_TRUE(contours.front()[11].IsEqual(OrthancStone::ScenePoint2D(4, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
668 ASSERT_TRUE(contours.front()[12].IsEqual(OrthancStone::ScenePoint2D(4, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
669 ASSERT_TRUE(contours.front()[13].IsEqual(OrthancStone::ScenePoint2D(1, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
670 ASSERT_TRUE(contours.front()[14].IsEqual(OrthancStone::ScenePoint2D(1, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
671 ASSERT_TRUE(contours.front()[15].IsEqual(OrthancStone::ScenePoint2D(4, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
672 ASSERT_TRUE(contours.front()[16].IsEqual(OrthancStone::ScenePoint2D(4, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
673 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
674 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
675 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
676 std::list<OrthancStone::Extent2D> rectangles; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
677 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
678 rectangles.push_back(OrthancStone::Extent2D(4, 4, 7, 6)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
679 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
680 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
681 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
682 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
683 ASSERT_EQ(1u, contours.size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
684 ASSERT_EQ(5u, contours.front().size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
685 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
686 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(7, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
687 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(7, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
688 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(1, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
689 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(1, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
690 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
691 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
692 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
693 std::list<OrthancStone::Extent2D> rectangles; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
694 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
695 rectangles.push_back(OrthancStone::Extent2D(1, 6, 4, 8)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
696 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
697 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
698 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
699 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
700 ASSERT_EQ(1u, contours.size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
701 ASSERT_EQ(5u, contours.front().size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
702 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
703 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(4, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
704 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(4, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
705 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(1, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
706 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(1, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
707 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
708 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
709 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
710 std::list<OrthancStone::Extent2D> rectangles; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
711 rectangles.push_back(OrthancStone::Extent2D(1, 1, 2, 2)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
712 rectangles.push_back(OrthancStone::Extent2D(4, 4, 7, 6)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
713 rectangles.push_back(OrthancStone::Extent2D(4, 6, 7, 8)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
714 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
715 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
716 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
717 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
718 ASSERT_EQ(2u, contours.size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
719 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
720 ASSERT_EQ(5u, contours.front().size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
721 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(4, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
722 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(7, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
723 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(7, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
724 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 4))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
725 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
726 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
727 ASSERT_EQ(5u, contours.back().size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
728 ASSERT_TRUE(contours.back()[0].IsEqual(OrthancStone::ScenePoint2D(1, 2))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
729 ASSERT_TRUE(contours.back()[1].IsEqual(OrthancStone::ScenePoint2D(2, 2))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
730 ASSERT_TRUE(contours.back()[2].IsEqual(OrthancStone::ScenePoint2D(2, 1))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
731 ASSERT_TRUE(contours.back()[3].IsEqual(OrthancStone::ScenePoint2D(1, 1))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
732 ASSERT_TRUE(contours.back()[4].IsEqual(OrthancStone::ScenePoint2D(1, 2))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
733 } |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
734 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
735 { |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
736 std::list<OrthancStone::Extent2D> rectangles; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
737 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
738 rectangles.push_back(OrthancStone::Extent2D(6, 4, 9, 6)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
739 rectangles.push_back(OrthancStone::Extent2D(4, 6, 7, 8)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
740 rectangles.push_back(OrthancStone::Extent2D(4, 2, 7, 6)); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
741 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
742 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
743 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
744 |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
745 ASSERT_EQ(1u, contours.size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
746 ASSERT_EQ(13u, contours.front().size()); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
747 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(4, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
748 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(7, 8))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
749 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(7, 6))); |
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
750 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(9, 6))); |
1876 | 751 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(9, 4))); |
752 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(7, 4))); | |
753 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(7, 2))); | |
754 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
755 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
756 ASSERT_TRUE(contours.front()[9].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
757 ASSERT_TRUE(contours.front()[10].IsEqual(OrthancStone::ScenePoint2D(1, 6))); | |
758 ASSERT_TRUE(contours.front()[11].IsEqual(OrthancStone::ScenePoint2D(4, 6))); | |
759 ASSERT_TRUE(contours.front()[12].IsEqual(OrthancStone::ScenePoint2D(4, 8))); | |
760 } | |
761 | |
762 { | |
763 std::list<OrthancStone::Extent2D> rectangles; | |
764 rectangles.push_back(OrthancStone::Extent2D(1, 4, 4, 6)); | |
765 rectangles.push_back(OrthancStone::Extent2D(4, 6, 7, 8)); | |
766 rectangles.push_back(OrthancStone::Extent2D(4, 2, 7, 6)); | |
767 | |
768 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
769 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
770 | |
771 ASSERT_EQ(1u, contours.size()); | |
772 ASSERT_EQ(9u, contours.front().size()); | |
773 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(4, 8))); | |
774 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(7, 8))); | |
775 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(7, 2))); | |
776 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
777 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
778 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
779 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(1, 6))); | |
780 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(4, 6))); | |
781 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(4, 8))); | |
782 } | |
783 | |
784 { | |
785 std::list<OrthancStone::Extent2D> rectangles; | |
786 rectangles.push_back(OrthancStone::Extent2D(2, 2, 4, 4)); | |
787 rectangles.push_back(OrthancStone::Extent2D(3, 3, 5, 5)); | |
788 | |
789 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
790 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
791 | |
792 ASSERT_EQ(1u, contours.size()); | |
793 ASSERT_EQ(9u, contours.front().size()); | |
794 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(3, 5))); | |
795 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(5, 5))); | |
796 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(5, 3))); | |
797 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 3))); | |
798 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
799 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
800 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
801 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
802 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(3, 5))); | |
803 } | |
804 | |
805 { | |
806 std::list<OrthancStone::Extent2D> rectangles; | |
807 rectangles.push_back(OrthancStone::Extent2D(2, 2, 4, 4)); | |
808 rectangles.push_back(OrthancStone::Extent2D(3, 1, 5, 3)); | |
809 | |
810 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
811 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
812 | |
813 ASSERT_EQ(1u, contours.size()); | |
814 ASSERT_EQ(9u, contours.front().size()); | |
815 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
816 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
817 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(4, 3))); | |
818 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(5, 3))); | |
819 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(5, 1))); | |
820 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(3, 1))); | |
821 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
822 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
823 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
824 } | |
825 | |
826 { | |
827 std::list<OrthancStone::Extent2D> rectangles; | |
828 rectangles.push_back(OrthancStone::Extent2D(2, 2, 4, 4)); | |
829 rectangles.push_back(OrthancStone::Extent2D(1, 1, 3, 3)); | |
830 | |
831 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
832 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
833 | |
834 ASSERT_EQ(1u, contours.size()); | |
835 ASSERT_EQ(9u, contours.front().size()); | |
836 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
837 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
838 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
839 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
840 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(3, 1))); | |
841 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(1, 1))); | |
842 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
843 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
844 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
1875
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
845 } |
1876 | 846 |
847 { | |
848 std::list<OrthancStone::Extent2D> rectangles; | |
849 rectangles.push_back(OrthancStone::Extent2D(2, 2, 4, 4)); | |
850 rectangles.push_back(OrthancStone::Extent2D(1, 3, 3, 5)); | |
851 | |
852 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
853 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
854 | |
855 ASSERT_EQ(1u, contours.size()); | |
856 ASSERT_EQ(9u, contours.front().size()); | |
857 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 5))); | |
858 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(3, 5))); | |
859 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
860 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
861 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
862 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
863 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
864 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
865 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(1, 5))); | |
866 } | |
867 | |
868 { | |
869 std::list<OrthancStone::Extent2D> rectangles; | |
870 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 3)); | |
871 rectangles.push_back(OrthancStone::Extent2D(3, 1, 4, 2)); | |
872 | |
873 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
874 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
875 | |
876 ASSERT_EQ(1u, contours.size()); | |
877 ASSERT_EQ(9u, contours.front().size()); | |
878 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
879 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
880 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
881 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 2))); | |
882 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 1))); | |
883 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(3, 1))); | |
884 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
885 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
886 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
887 } | |
888 | |
889 { | |
890 std::list<OrthancStone::Extent2D> rectangles; | |
891 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 3)); | |
892 rectangles.push_back(OrthancStone::Extent2D(3, 3, 4, 4)); | |
893 | |
894 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
895 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
896 | |
897 ASSERT_EQ(1u, contours.size()); | |
898 ASSERT_EQ(9u, contours.front().size()); | |
899 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
900 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
901 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(4, 3))); | |
902 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
903 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
904 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
905 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
906 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
907 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
908 } | |
909 | |
910 { | |
911 std::list<OrthancStone::Extent2D> rectangles; | |
912 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 3)); | |
913 rectangles.push_back(OrthancStone::Extent2D(1, 3, 2, 4)); | |
914 | |
915 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
916 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
917 | |
918 ASSERT_EQ(1u, contours.size()); | |
919 ASSERT_EQ(9u, contours.front().size()); | |
920 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
921 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
922 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
923 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
924 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
925 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
926 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
927 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
928 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
929 } | |
930 | |
931 { | |
932 std::list<OrthancStone::Extent2D> rectangles; | |
933 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 3)); | |
934 rectangles.push_back(OrthancStone::Extent2D(1, 1, 2, 2)); | |
935 | |
936 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
937 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
938 | |
939 ASSERT_EQ(1u, contours.size()); | |
940 ASSERT_EQ(9u, contours.front().size()); | |
941 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
942 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
943 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
944 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
945 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(2, 1))); | |
946 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(1, 1))); | |
947 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(1, 2))); | |
948 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
949 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
950 } | |
951 | |
952 { | |
953 std::list<OrthancStone::Extent2D> rectangles; | |
954 rectangles.push_back(OrthancStone::Extent2D(2, 2, 3, 5)); | |
955 rectangles.push_back(OrthancStone::Extent2D(1, 3, 4, 4)); | |
956 | |
957 std::list< std::vector<OrthancStone::ScenePoint2D> > contours; | |
958 OrthancStone::UnionOfRectangles::Apply(contours, rectangles); | |
959 | |
960 ASSERT_EQ(1u, contours.size()); | |
961 ASSERT_EQ(13u, contours.front().size()); | |
962 ASSERT_TRUE(contours.front()[0].IsEqual(OrthancStone::ScenePoint2D(2, 5))); | |
963 ASSERT_TRUE(contours.front()[1].IsEqual(OrthancStone::ScenePoint2D(3, 5))); | |
964 ASSERT_TRUE(contours.front()[2].IsEqual(OrthancStone::ScenePoint2D(3, 4))); | |
965 ASSERT_TRUE(contours.front()[3].IsEqual(OrthancStone::ScenePoint2D(4, 4))); | |
966 ASSERT_TRUE(contours.front()[4].IsEqual(OrthancStone::ScenePoint2D(4, 3))); | |
967 ASSERT_TRUE(contours.front()[5].IsEqual(OrthancStone::ScenePoint2D(3, 3))); | |
968 ASSERT_TRUE(contours.front()[6].IsEqual(OrthancStone::ScenePoint2D(3, 2))); | |
969 ASSERT_TRUE(contours.front()[7].IsEqual(OrthancStone::ScenePoint2D(2, 2))); | |
970 ASSERT_TRUE(contours.front()[8].IsEqual(OrthancStone::ScenePoint2D(2, 3))); | |
971 ASSERT_TRUE(contours.front()[9].IsEqual(OrthancStone::ScenePoint2D(1, 3))); | |
972 ASSERT_TRUE(contours.front()[10].IsEqual(OrthancStone::ScenePoint2D(1, 4))); | |
973 ASSERT_TRUE(contours.front()[11].IsEqual(OrthancStone::ScenePoint2D(2, 4))); | |
974 ASSERT_TRUE(contours.front()[12].IsEqual(OrthancStone::ScenePoint2D(2, 5))); | |
975 } | |
1875
b896f20d24ca
added UnionOfRectangles algorithm
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1874
diff
changeset
|
976 } |
1890
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
977 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
978 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
979 TEST(LinearAlgebra, ComputeMedian) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
980 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
981 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
982 std::vector<double> v; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
983 ASSERT_THROW(OrthancStone::LinearAlgebra::ComputeMedian(v), Orthanc::OrthancException); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
984 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
985 v.push_back(1); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
986 v.push_back(3); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
987 v.push_back(3); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
988 v.push_back(6); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
989 v.push_back(7); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
990 v.push_back(8); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
991 v.push_back(9); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
992 ASSERT_DOUBLE_EQ(6.0, OrthancStone::LinearAlgebra::ComputeMedian(v)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
993 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
994 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
995 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
996 std::vector<double> v; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
997 v.push_back(1); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
998 v.push_back(2); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
999 v.push_back(3); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1000 v.push_back(4); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1001 v.push_back(5); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1002 v.push_back(6); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1003 v.push_back(8); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1004 v.push_back(9); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1005 ASSERT_DOUBLE_EQ(4.5, OrthancStone::LinearAlgebra::ComputeMedian(v)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1006 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1007 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1008 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1009 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1010 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1011 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1012 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1013 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1014 namespace OrthancStone |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1015 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1016 namespace Internals |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1017 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1018 class BucketMapper : public boost::noncopyable |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1019 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1020 private: |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1021 double minValue_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1022 double maxValue_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1023 size_t bucketsCount_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1024 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1025 public: |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1026 BucketMapper(double minValue, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1027 double maxValue, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1028 size_t bucketsCount) : |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1029 minValue_(minValue), |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1030 maxValue_(maxValue), |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1031 bucketsCount_(bucketsCount) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1032 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1033 if (minValue >= maxValue || |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1034 bucketsCount <= 0) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1035 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1036 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1037 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1038 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1039 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1040 size_t GetSize() const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1041 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1042 return bucketsCount_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1043 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1044 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1045 void CheckIndex(size_t i) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1046 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1047 if (i >= bucketsCount_) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1048 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1049 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1050 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1051 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1052 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1053 double GetBucketLow(size_t i) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1054 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1055 CheckIndex(i); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1056 double alpha = static_cast<double>(i) / static_cast<double>(bucketsCount_); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1057 return (1.0 - alpha) * minValue_ + alpha * maxValue_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1058 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1059 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1060 double GetBucketHigh(size_t i) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1061 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1062 CheckIndex(i); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1063 double alpha = static_cast<double>(i + 1) / static_cast<double>(bucketsCount_); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1064 return (1.0 - alpha) * minValue_ + alpha * maxValue_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1065 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1066 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1067 double GetBucketCenter(size_t i) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1068 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1069 CheckIndex(i); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1070 double alpha = (static_cast<double>(i) + 0.5) / static_cast<double>(bucketsCount_); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1071 return (1.0 - alpha) * minValue_ + alpha * maxValue_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1072 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1073 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1074 size_t GetBucketIndex(double value) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1075 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1076 if (value < minValue_ || |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1077 value > maxValue_) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1078 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1079 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1080 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1081 else |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1082 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1083 double tmp = (value - minValue_) / (maxValue_ - minValue_) * static_cast<double>(bucketsCount_); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1084 assert(tmp >= 0 && tmp <= static_cast<double>(bucketsCount_)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1085 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1086 size_t bucket = static_cast<unsigned int>(std::floor(tmp)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1087 if (bucket == bucketsCount_) // This is the case if "value == maxValue_" |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1088 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1089 return bucketsCount_ - 1; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1090 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1091 else |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1092 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1093 return bucket; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1094 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1095 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1096 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1097 }; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1098 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1099 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1100 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1101 class BucketAccumulator1D : public boost::noncopyable |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1102 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1103 private: |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1104 struct Bucket |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1105 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1106 size_t count_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1107 std::list<double> values_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1108 }; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1109 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1110 Internals::BucketMapper mapper_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1111 std::vector<Bucket> buckets_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1112 bool storeValues_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1113 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1114 public: |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1115 BucketAccumulator1D(double minValue, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1116 double maxValue, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1117 size_t countBuckets, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1118 bool storeValues) : |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1119 mapper_(minValue, maxValue, countBuckets), |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1120 buckets_(countBuckets), |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1121 storeValues_(storeValues) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1122 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1123 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1124 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1125 size_t GetSize() const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1126 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1127 return mapper_.GetSize(); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1128 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1129 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1130 double GetBucketLow(size_t i) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1131 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1132 return mapper_.GetBucketLow(i); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1133 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1134 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1135 double GetBucketHigh(size_t i) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1136 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1137 return mapper_.GetBucketHigh(i); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1138 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1139 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1140 double GetBucketCenter(size_t i) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1141 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1142 return mapper_.GetBucketCenter(i); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1143 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1144 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1145 size_t GetBucketContentSize(size_t i) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1146 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1147 mapper_.CheckIndex(i); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1148 return buckets_[i].count_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1149 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1150 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1151 void AddValue(double value) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1152 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1153 Bucket& bucket = buckets_[mapper_.GetBucketIndex(value)]; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1154 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1155 bucket.count_++; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1156 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1157 if (storeValues_) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1158 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1159 bucket.values_.push_back(value); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1160 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1161 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1162 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1163 size_t FindBestBucket() const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1164 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1165 size_t best = 0; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1166 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1167 for (size_t i = 0; i < buckets_.size(); i++) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1168 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1169 if (buckets_[i].count_ > buckets_[best].count_) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1170 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1171 best = i; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1172 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1173 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1174 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1175 return best; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1176 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1177 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1178 double ComputeBestCenter() const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1179 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1180 return GetBucketCenter(FindBestBucket()); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1181 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1182 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1183 double ComputeBestMedian() const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1184 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1185 if (!storeValues_) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1186 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1187 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1188 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1189 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1190 const std::list<double>& values = buckets_[FindBestBucket()].values_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1191 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1192 std::vector<double> v; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1193 v.reserve(values.size()); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1194 for (std::list<double>::const_iterator it = values.begin(); it != values.end(); ++it) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1195 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1196 v.push_back(*it); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1197 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1198 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1199 return LinearAlgebra::ComputeMedian(v); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1200 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1201 }; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1202 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1203 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1204 class BucketAccumulator2D : public boost::noncopyable |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1205 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1206 private: |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1207 struct Bucket |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1208 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1209 size_t count_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1210 std::list<double> valuesX_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1211 std::list<double> valuesY_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1212 }; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1213 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1214 Internals::BucketMapper mapperX_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1215 Internals::BucketMapper mapperY_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1216 std::vector<Bucket> buckets_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1217 bool storeValues_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1218 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1219 size_t FindBestInternal() const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1220 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1221 size_t best = 0; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1222 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1223 for (size_t i = 0; i < buckets_.size(); i++) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1224 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1225 if (buckets_[i].count_ > buckets_[best].count_) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1226 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1227 best = i; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1228 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1229 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1230 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1231 return best; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1232 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1233 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1234 public: |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1235 BucketAccumulator2D(double minValueX, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1236 double maxValueX, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1237 size_t countBucketsX, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1238 double minValueY, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1239 double maxValueY, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1240 size_t countBucketsY, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1241 bool storeValues) : |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1242 mapperX_(minValueX, maxValueX, countBucketsX), |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1243 mapperY_(minValueY, maxValueY, countBucketsY), |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1244 buckets_(countBucketsX * countBucketsY), |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1245 storeValues_(storeValues) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1246 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1247 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1248 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1249 void AddValue(double valueX, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1250 double valueY) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1251 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1252 size_t x = mapperX_.GetBucketIndex(valueX); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1253 size_t y = mapperY_.GetBucketIndex(valueY); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1254 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1255 Bucket& bucket = buckets_[x + y * mapperX_.GetSize()]; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1256 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1257 bucket.count_++; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1258 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1259 if (storeValues_) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1260 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1261 bucket.valuesX_.push_back(valueX); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1262 bucket.valuesY_.push_back(valueY); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1263 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1264 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1265 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1266 void FindBestBucket(size_t& bucketX, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1267 size_t& bucketY) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1268 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1269 size_t best = FindBestInternal(); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1270 bucketX = best % mapperX_.GetSize(); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1271 bucketY = best / mapperX_.GetSize(); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1272 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1273 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1274 void ComputeBestCenter(double& x, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1275 double& y) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1276 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1277 size_t bucketX, bucketY; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1278 FindBestBucket(bucketX, bucketY); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1279 x = mapperX_.GetBucketCenter(bucketX); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1280 y = mapperY_.GetBucketCenter(bucketY); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1281 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1282 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1283 void ComputeBestMedian(double& x, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1284 double& y) const |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1285 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1286 if (!storeValues_) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1287 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1288 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1289 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1290 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1291 const std::list<double>& valuesX = buckets_[FindBestInternal()].valuesX_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1292 const std::list<double>& valuesY = buckets_[FindBestInternal()].valuesY_; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1293 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1294 std::vector<double> v; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1295 v.reserve(valuesX.size()); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1296 for (std::list<double>::const_iterator it = valuesX.begin(); it != valuesX.end(); ++it) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1297 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1298 v.push_back(*it); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1299 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1300 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1301 x = LinearAlgebra::ComputeMedian(v); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1302 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1303 v.clear(); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1304 v.reserve(valuesY.size()); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1305 for (std::list<double>::const_iterator it = valuesY.begin(); it != valuesY.end(); ++it) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1306 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1307 v.push_back(*it); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1308 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1309 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1310 y = LinearAlgebra::ComputeMedian(v); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1311 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1312 }; |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1313 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1314 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1315 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1316 TEST(BucketAccumulator1D, Basic) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1317 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1318 for (int storeValues = 0; storeValues <= 1; storeValues++) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1319 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1320 OrthancStone::BucketAccumulator1D b(-10, 30, 4, storeValues != 0); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1321 ASSERT_EQ(4u, b.GetSize()); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1322 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1323 ASSERT_DOUBLE_EQ(-10.0, b.GetBucketLow(0)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1324 ASSERT_DOUBLE_EQ(0.0, b.GetBucketLow(1)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1325 ASSERT_DOUBLE_EQ(10.0, b.GetBucketLow(2)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1326 ASSERT_DOUBLE_EQ(20.0, b.GetBucketLow(3)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1327 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1328 ASSERT_DOUBLE_EQ(0.0, b.GetBucketHigh(0)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1329 ASSERT_DOUBLE_EQ(10.0, b.GetBucketHigh(1)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1330 ASSERT_DOUBLE_EQ(20.0, b.GetBucketHigh(2)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1331 ASSERT_DOUBLE_EQ(30.0, b.GetBucketHigh(3)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1332 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1333 ASSERT_DOUBLE_EQ(-5.0, b.GetBucketCenter(0)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1334 ASSERT_DOUBLE_EQ(5.0, b.GetBucketCenter(1)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1335 ASSERT_DOUBLE_EQ(15.0, b.GetBucketCenter(2)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1336 ASSERT_DOUBLE_EQ(25.0, b.GetBucketCenter(3)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1337 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1338 ASSERT_EQ(0u, b.GetBucketContentSize(0)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1339 ASSERT_EQ(0u, b.GetBucketContentSize(1)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1340 ASSERT_EQ(0u, b.GetBucketContentSize(2)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1341 ASSERT_EQ(0u, b.GetBucketContentSize(3)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1342 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1343 ASSERT_THROW(b.ComputeBestMedian(), Orthanc::OrthancException); // No data point |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1344 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1345 b.AddValue(-10.0); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1346 b.AddValue(0.0); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1347 b.AddValue(9.9999); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1348 b.AddValue(10.0); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1349 b.AddValue(20.0); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1350 b.AddValue(29.9999); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1351 b.AddValue(30.0); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1352 ASSERT_THROW(b.AddValue(30.00001), Orthanc::OrthancException); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1353 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1354 ASSERT_EQ(3u, b.FindBestBucket()); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1355 ASSERT_EQ(25.0, b.ComputeBestCenter()); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1356 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1357 ASSERT_EQ(1u, b.GetBucketContentSize(0)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1358 ASSERT_EQ(2u, b.GetBucketContentSize(1)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1359 ASSERT_EQ(1u, b.GetBucketContentSize(2)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1360 ASSERT_EQ(3u, b.GetBucketContentSize(3)); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1361 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1362 if (storeValues == 0) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1363 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1364 ASSERT_THROW(b.ComputeBestMedian(), Orthanc::OrthancException); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1365 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1366 else |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1367 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1368 ASSERT_EQ(29.9999, b.ComputeBestMedian()); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1369 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1370 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1371 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1372 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1373 TEST(BucketAccumulator2D, Basic) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1374 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1375 for (int storeValues = 0; storeValues <= 1; storeValues++) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1376 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1377 OrthancStone::BucketAccumulator2D b(-10, 30, 4, |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1378 0, 3, 3, storeValues != 0); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1379 |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1380 if (storeValues == 0) |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1381 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1382 //ASSERT_THROW(b.ComputeBestMedian(), Orthanc::OrthancException); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1383 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1384 else |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1385 { |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1386 //ASSERT_EQ(29.9999, b.ComputeBestMedian()); |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1387 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1388 } |
6ce81914f7e4
added classes BucketAccumulator1D/2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1877
diff
changeset
|
1389 } |