20 #ifndef INCLUDE_WYKOBI_INSTANTIATE
21 #define INCLUDE_WYKOBI_INSTANTIATE
29 #define INSTANTIATE_WYKOBI(T, InputIterator2d, InputIterator3d, \
30 OutputIterator2d, OutputIterator3d) \
31 template int orientation<T>(const T& x1, const T& y1, const T& x2, \
32 const T& y2, const T& px, const T& py); \
33 template int orientation<T>(const T& x1, const T& y1, const T& z1, \
34 const T& x2, const T& y2, const T& z2, \
35 const T& x3, const T& y3, const T& z3, \
36 const T& px, const T& py, const T& pz); \
37 template int robust_orientation<T>(const T& x1, const T& y1, const T& x2, \
38 const T& y2, const T& px, const T& py); \
39 template int robust_orientation<T>(const T& x1, const T& y1, const T& z1, \
40 const T& x2, const T& y2, const T& z2, \
41 const T& x3, const T& y3, const T& z3, \
42 const T& px, const T& py, const T& pz); \
43 template int orientation<T>(const point2d<T>& point1, \
44 const point2d<T>& point2, const T& px, \
46 template int orientation<T>(const point2d<T>& point1, \
47 const point2d<T>& point2, \
48 const point2d<T>& point3); \
49 template int orientation<T>(const line<T, 2>& line, \
50 const point2d<T>& point); \
51 template int orientation<T>(const segment<T, 2>& segment, \
52 const point2d<T>& point); \
53 template int orientation<T>(const triangle<T, 2>& triangle); \
54 template int orientation<T>( \
55 const point3d<T>& point1, const point3d<T>& point2, \
56 const point3d<T>& point3, const T& px, const T& py, const T& pz); \
57 template int orientation<T>( \
58 const point3d<T>& point1, const point3d<T>& point2, \
59 const point3d<T>& point3, const point3d<T>& point4); \
60 template int orientation<T>(const triangle<T, 3>& triangle, \
61 const point3d<T>& point); \
62 template bool differing_orientation<T>( \
63 const T& x1, const T& y1, const T& x2, const T& y2, const T& p1x, \
64 const T& p1y, const T& p2x, const T& p2y); \
65 template bool differing_orientation<T>( \
66 const point2d<T>& p1, const point2d<T>& p2, const point2d<T>& q1, \
67 const point2d<T>& q2); \
68 template int in_circle<T>(const T& x1, const T& y1, const T& x2, \
69 const T& y2, const T& x3, const T& y3, \
70 const T& px, const T& py); \
71 template int in_circle<T>( \
72 const point2d<T>& point1, const point2d<T>& point2, \
73 const point2d<T>& point3, const point2d<T>& point4); \
74 template int in_circle<T>(const triangle<T, 2>& triangle, \
75 const point2d<T>& point); \
76 template int in_sphere<T>( \
77 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
78 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
79 const T& y4, const T& z4, const T& px, const T& py, const T& pz); \
80 template int in_sphere<T>( \
81 const point3d<T>& point1, const point3d<T>& point2, \
82 const point3d<T>& point3, const point3d<T>& point4, \
83 const point3d<T>& point5); \
84 template int in_sphere<T>(const quadix<T, 3>& quadix, \
85 const point3d<T>& point); \
86 template T signed_area<T>(const T& x1, const T& y1, const T& x2, \
87 const T& y2, const T& px, const T& py); \
88 template T signed_area<T>(const point2d<T>& point1, \
89 const point2d<T>& point2, const T& px, \
91 template T signed_area<T>(const point2d<T>& point1, \
92 const point2d<T>& point2, \
93 const point2d<T>& point3); \
94 template T signed_area<T>(const segment<T, 2>& segment, \
95 const point2d<T>& point); \
96 template T signed_volume<T>(const T& x1, const T& y1, const T& z1, \
97 const T& x2, const T& y2, const T& z2, \
98 const T& x3, const T& y3, const T& z3, \
99 const T& px, const T& py, const T& pz); \
100 template T signed_volume<T>( \
101 const point3d<T>& point1, const point3d<T>& point2, \
102 const point3d<T>& point3, const T& px, const T& py, const T& pz); \
103 template T signed_volume<T>( \
104 const point3d<T>& point1, const point3d<T>& point2, \
105 const point3d<T>& point3, const point3d<T>& point4); \
106 template T signed_volume<T>(const triangle<T, 3>& triangle, \
107 const point3d<T>& point); \
108 template bool collinear<T>(const T& x1, const T& y1, const T& x2, \
109 const T& y2, const T& x3, const T& y3, \
111 template bool collinear<T>( \
112 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
113 const T& z2, const T& x3, const T& y3, const T& z3, const T& epsilon); \
114 template bool collinear<T>(const point2d<T>& point1, \
115 const point2d<T>& point2, \
116 const point2d<T>& point3); \
117 template bool collinear<T>(const point3d<T>& point1, \
118 const point3d<T>& point2, \
119 const point3d<T>& point3); \
120 template bool robust_collinear<T>(const T& x1, const T& y1, const T& x2, \
121 const T& y2, const T& x3, const T& y3, \
123 template bool robust_collinear<T>( \
124 const point2d<T>& point1, const point2d<T>& point2, \
125 const point2d<T>& point3, const T& epsilon); \
126 template bool robust_collinear<T>( \
127 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
128 const T& z2, const T& x3, const T& y3, const T& z3, const T& epsilon); \
129 template bool robust_collinear<T>( \
130 const point3d<T>& point1, const point3d<T>& point2, \
131 const point3d<T>& point3, const T& epsilon); \
132 template bool robust_collinear<T>( \
133 const line<T, 2>& line, const point2d<T>& point, const T& epsilon); \
134 template bool robust_collinear<T>( \
135 const line<T, 3>& line, const point3d<T>& point, const T& epsilon); \
136 template bool is_point_collinear<T>(const T& x1, const T& y1, const T& x2, \
137 const T& y2, const T& px, const T& py, \
138 const bool robust); \
139 template bool is_point_collinear<T>( \
140 const point2d<T>& point1, const point2d<T>& point2, \
141 const point2d<T>& point3, const bool robust); \
142 template bool is_point_collinear<T>(const point2d<T>& point1, \
143 const point2d<T>& point2, const T& px, \
144 const T& py, const bool robust); \
145 template bool is_point_collinear<T>(const segment<T, 2>& segment, \
146 const point2d<T>& point, \
147 const bool robust); \
148 template bool is_point_collinear<T>( \
149 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
150 const T& z2, const T& px, const T& py, const T& pz, const bool robust); \
151 template bool is_point_collinear<T>( \
152 const point3d<T>& point1, const point3d<T>& point2, \
153 const point3d<T>& point3, const bool robust); \
154 template bool is_point_collinear<T>(const segment<T, 3>& segment, \
155 const point3d<T>& point, \
156 const bool robust); \
157 template bool robust_coplanar<T>( \
158 const point3d<T> point1, const point3d<T> point2, \
159 const point3d<T> point3, const point3d<T> point4, const T& epsilon); \
160 template bool coplanar<T>(const ray<T, 3>& ray1, const ray<T, 3>& ray2); \
161 template bool coplanar<T>(const segment<T, 3>& segment1, \
162 const segment<T, 3>& segment2); \
163 template bool coplanar<T>(const line<T, 3>& line1, const line<T, 3>& line2); \
164 template bool coplanar<T>(const triangle<T, 3>& triangle1, \
165 const triangle<T, 3>& triangle2); \
166 template bool coplanar<T>(const quadix<T, 3>& quadix1, \
167 const quadix<T, 3>& quadix2); \
168 template bool cocircular<T>(const T& x1, const T& y1, const T& x2, \
169 const T& y2, const T& x3, const T& y3, \
170 const T& x4, const T& y4, const T& epsilon); \
171 template bool cocircular<T>( \
172 const point2d<T>& point1, const point2d<T>& point2, \
173 const point2d<T>& point3, const point2d<T>& point4, const T& epsilon); \
174 template bool cocircular<T>(const triangle<T, 2>& triangle, \
175 const point2d<T>& point, const T& epsilon); \
176 template bool cocircular<T>(const circle<T>& circle, \
177 const point2d<T>& point, const T& epsilon); \
178 template bool is_skinny_triangle<T>(const T& x1, const T& y1, const T& x2, \
179 const T& y2, const T& x3, const T& y3); \
180 template bool is_skinny_triangle<T>(const point2d<T>& point1, \
181 const point2d<T>& point2, \
182 const point2d<T>& point3); \
183 template bool is_skinny_triangle<T>(const triangle<T, 2>& triangle); \
184 template bool intersect<T>(const T& x1, const T& y1, const T& x2, \
185 const T& y2, const T& x3, const T& y3, \
186 const T& x4, const T& y4); \
187 template bool intersect<T>(const T& x1, const T& y1, const T& x2, \
188 const T& y2, const T& x3, const T& y3, \
189 const T& x4, const T& y4, T& ix, T& iy); \
190 template bool intersect<T>( \
191 const point2d<T>& point1, const point2d<T>& point2, \
192 const point2d<T>& point3, const point2d<T>& point4); \
193 template bool intersect<T>(const point2d<T>& point1, \
194 const point2d<T>& point2, \
195 const point2d<T>& point3, \
196 const point2d<T>& point4, point2d<T>& int_point); \
197 template bool intersect<T>(const segment<T, 2>& segment1, \
198 const segment<T, 2>& segment2); \
199 template bool intersect<T>(const segment<T, 2>& segment1, \
200 const segment<T, 2>& segment2, T& ix, T& iy); \
201 template bool intersect<T>(const segment<T, 2>& segment1, \
202 const segment<T, 2>& segment2, \
203 point2d<T>& i_point); \
204 template bool intersect<T>( \
205 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
206 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
207 const T& y4, const T& z4, const T& fuzzy); \
208 template bool intersect<T>( \
209 const point3d<T>& point1, const point3d<T>& point2, \
210 const point3d<T>& point3, const point3d<T>& point4, const T& fuzzy); \
211 template bool intersect<T>(const segment<T, 3>& segment1, \
212 const segment<T, 3>& segment2, const T& fuzzy); \
213 template bool intersect<T>(const segment<T, 2>& segment, \
214 const rectangle<T>& rectangle); \
215 template bool intersect<T>(const segment<T, 2>& segment, \
216 const triangle<T, 2>& triangle); \
217 template bool intersect<T>(const segment<T, 2>& segment, \
218 const quadix<T, 2>& quadix); \
219 template bool intersect<T>(const segment<T, 2>& segment, \
220 const line<T, 2>& line); \
221 template bool intersect<T>(const segment<T, 2>& segment, \
222 const circle<T>& circle); \
223 template bool intersect<T>(const segment<T, 2>& segment, \
224 const quadratic_bezier<T, 2>& bezier, \
225 const std::size_t& steps); \
226 template bool intersect<T>(const segment<T, 2>& segment, \
227 const cubic_bezier<T, 2>& bezier, \
228 const std::size_t& steps); \
229 template bool intersect<T>(const segment<T, 3>& segment, \
230 const line<T, 3>& line, const T& fuzzy); \
231 template bool intersect<T>(const segment<T, 3>& segment, \
232 const box<T, 3>& box); \
233 template bool intersect<T>(const segment<T, 3>& segment, \
234 const sphere<T>& sphere); \
235 template bool intersect<T>(const segment<T, 3>& segment, \
236 const plane<T, 3>& plane); \
237 template bool intersect<T>(const segment<T, 3>& segment, \
238 const quadratic_bezier<T, 3>& bezier, \
239 const std::size_t& steps); \
240 template bool intersect<T>(const segment<T, 3>& segment, \
241 const cubic_bezier<T, 3>& bezier, \
242 const std::size_t& steps); \
243 template bool intersect<T>(const line<T, 2>& line, \
244 const triangle<T, 2>& triangle); \
245 template bool intersect<T>(const line<T, 2>& line, \
246 const quadix<T, 2>& quadix); \
247 template bool intersect<T>(const line<T, 2>& line1, \
248 const line<T, 2>& line2); \
249 template bool intersect<T>(const line<T, 2>& line, const circle<T>& circle); \
250 template bool intersect<T>(const line<T, 2>& line, \
251 const quadratic_bezier<T, 2>& bezier, \
252 const std::size_t& steps); \
253 template bool intersect<T>(const line<T, 2>& line, \
254 const cubic_bezier<T, 2>& bezier, \
255 const std::size_t& steps); \
256 template bool intersect<T>(const line<T, 3>& line, \
257 const triangle<T, 3>& triangle); \
258 template bool intersect<T>(const line<T, 3>& line, \
259 const plane<T, 3>& plane); \
260 template bool intersect<T>(const line<T, 3>& line, const sphere<T>& sphere); \
261 template bool intersect<T>(const line<T, 3>& line, \
262 const quadratic_bezier<T, 3>& bezier, \
263 const std::size_t& steps); \
264 template bool intersect<T>(const line<T, 3>& line, \
265 const cubic_bezier<T, 3>& bezier, \
266 const std::size_t& steps); \
267 template bool intersect<T>(const triangle<T, 2>& triangle1, \
268 const triangle<T, 2>& triangle2); \
269 template bool intersect<T>(const triangle<T, 2>& triangle, \
270 const circle<T>& circle); \
271 template bool intersect<T>(const triangle<T, 2>& triangle, \
272 const rectangle<T>& rectangle); \
273 template bool intersect<T>(const triangle<T, 2>& triangle, \
274 const quadratic_bezier<T, 2>& bezier, \
275 const std::size_t& steps); \
276 template bool intersect<T>(const triangle<T, 2>& triangle, \
277 const cubic_bezier<T, 2>& bezier, \
278 const std::size_t& steps); \
279 template bool intersect<T>(const rectangle<T>& rectangle1, \
280 const rectangle<T>& rectangle2); \
281 template bool intersect<T>(const rectangle<T>& rectangle, \
282 const quadratic_bezier<T, 2>& bezier, \
283 const std::size_t& steps); \
284 template bool intersect<T>(const rectangle<T>& rectangle, \
285 const cubic_bezier<T, 2>& bezier, \
286 const std::size_t& steps); \
287 template bool intersect<T>(const rectangle<T>& rectangle, \
288 const circle<T>& circle); \
289 template bool intersect<T>(const quadix<T, 2>& quadix, \
290 const quadratic_bezier<T, 2>& bezier, \
291 const std::size_t& steps); \
292 template bool intersect<T>(const quadix<T, 2>& quadix, \
293 const cubic_bezier<T, 2>& bezier, \
294 const std::size_t& steps); \
295 template bool intersect<T>(const circle<T>& circle1, \
296 const circle<T>& circle2); \
297 template bool intersect<T>(const circle<T>& circle, \
298 const quadratic_bezier<T, 2>& bezier, \
299 const std::size_t& steps); \
300 template bool intersect<T>(const circle<T>& circle, \
301 const cubic_bezier<T, 2>& bezier, \
302 const std::size_t& steps); \
303 template bool intersect<T>(const box<T, 3>& box, const sphere<T>& sphere); \
304 template bool intersect<T>(const sphere<T>& sphere1, \
305 const sphere<T>& sphere2); \
306 template bool intersect<T>(const sphere<T>& sphere, \
307 const quadratic_bezier<T, 3>& bezier, \
308 const std::size_t& steps); \
309 template bool intersect<T>(const sphere<T>& sphere, \
310 const cubic_bezier<T, 3>& bezier, \
311 const std::size_t& steps); \
312 template bool intersect<T>(const ray<T, 2>& ray1, const ray<T, 2>& ray2); \
313 template bool intersect<T>(const ray<T, 3>& ray1, const ray<T, 3>& ray2); \
314 template bool intersect<T>(const ray<T, 2>& ray, \
315 const segment<T, 2>& segment); \
316 template bool intersect<T>(const ray<T, 3>& ray, \
317 const segment<T, 3>& segment); \
318 template bool intersect<T>(const ray<T, 2>& ray, \
319 const rectangle<T>& rectangle); \
320 template bool intersect<T>(const ray<T, 3>& ray, const box<T, 3>& box); \
321 template bool intersect<T>(const ray<T, 2>& ray, \
322 const triangle<T, 2>& triangle); \
323 template bool intersect<T>(const ray<T, 3>& ray, \
324 const triangle<T, 3>& triangle); \
325 template bool intersect<T>(const ray<T, 2>& ray, \
326 const quadix<T, 2>& quadix); \
327 template bool intersect<T>(const ray<T, 2>& ray, const circle<T>& circle); \
328 template bool intersect<T>(const ray<T, 3>& ray, const sphere<T>& sphere); \
329 template bool intersect<T>(const ray<T, 3>& ray, const plane<T, 3>& plane); \
330 template bool intersect<T>(const ray<T, 2>& ray, \
331 const polygon<T, 2>& polygon); \
332 template bool intersect<T>(const plane<T, 3>& plane1, \
333 const plane<T, 3>& plane2); \
334 template bool intersect<T>(const plane<T, 3>& plane, \
335 const sphere<T>& sphere); \
336 template bool intersect<T>(const plane<T, 3>& plane, \
337 const line<T, 3>& line); \
338 template bool simple_intersect<T>(const T& x1, const T& y1, const T& x2, \
339 const T& y2, const T& x3, const T& y3, \
340 const T& x4, const T& y4); \
341 template bool simple_intersect<T>( \
342 const point2d<T>& point1, const point2d<T>& point2, \
343 const point2d<T>& point3, const point2d<T>& point4); \
344 template bool simple_intersect<T>(const segment<T, 2>& segment1, \
345 const segment<T, 2>& segment2); \
346 template bool intersect_vertical_horizontal<T>( \
347 const segment<T, 2>& segment1, const segment<T, 2>& segment2); \
348 template bool intersect_vertical_vertical<T>(const segment<T, 2>& segment1, \
349 const segment<T, 2>& segment2); \
350 template bool intersect_horizontal_horizontal<T>( \
351 const segment<T, 2>& segment1, const segment<T, 2>& segment2); \
352 template void intersection_point<T>(const T& x1, const T& y1, const T& x2, \
353 const T& y2, const T& x3, const T& y3, \
354 const T& x4, const T& y4, T& ix, T& iy); \
355 template void intersection_point<T>( \
356 const point2d<T>& point1, const point2d<T>& point2, \
357 const point2d<T>& point3, const point2d<T>& point4, T& ix, T& iy); \
358 template point2d<T> intersection_point<T>( \
359 const point2d<T>& point1, const point2d<T>& point2, \
360 const point2d<T>& point3, const point2d<T>& point4); \
361 template point2d<T> intersection_point<T>(const segment<T, 2>& segment1, \
362 const segment<T, 2>& segment2); \
363 template void intersection_point<T>( \
364 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
365 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
366 const T& y4, const T& z4, T& ix, T& iy, T& iz, const T& fuzzy); \
367 template void intersection_point<T>( \
368 const point3d<T>& point1, const point3d<T>& point2, \
369 const point3d<T>& point3, const point3d<T>& point4, T& ix, T& iy, T& iz, \
371 template point3d<T> intersection_point<T>( \
372 const point3d<T>& point1, const point3d<T>& point2, \
373 const point3d<T>& point3, const point3d<T>& point4, const T& fuzzy); \
374 template point3d<T> intersection_point<T>(const segment<T, 3>& segment1, \
375 const segment<T, 3>& segment2, \
377 template point2d<T> intersection_point<T>(const segment<T, 2>& segment, \
378 const line<T, 2>& line); \
379 template point3d<T> intersection_point<T>( \
380 const segment<T, 3>& segment, const line<T, 3>& line, const T& fuzzy); \
381 template point3d<T> intersection_point<T>(const segment<T, 3>& segment, \
382 const plane<T, 3>& plane); \
383 template void intersection_point<T, OutputIterator3d>( \
384 const segment<T, 3>& segment, const sphere<T>& sphere, \
385 OutputIterator3d out); \
386 template void intersection_point<T, OutputIterator2d>( \
387 const segment<T, 2>& segment, const quadratic_bezier<T, 2>& bezier, \
388 OutputIterator2d out, const std::size_t& steps); \
389 template void intersection_point<T, OutputIterator2d>( \
390 const segment<T, 2>& segment, const cubic_bezier<T, 2>& bezier, \
391 OutputIterator2d out, const std::size_t& steps); \
392 template point2d<T> intersection_point<T>(const line<T, 2>& line1, \
393 const line<T, 2>& line2); \
394 template point3d<T> intersection_point<T>( \
395 const line<T, 3>& line1, const line<T, 3>& line2, const T& fuzzy); \
396 template void intersection_point<T>(const circle<T>& circle1, \
397 const circle<T>& circle2, \
398 point2d<T>& point1, point2d<T>& point2); \
399 template void intersection_point<T, OutputIterator2d>( \
400 const segment<T, 2>& segment, const triangle<T, 2>& triangle, \
401 OutputIterator2d out); \
402 template void intersection_point<T>(const line<T, 3>& line, \
403 const triangle<T, 3>& triangle, \
404 point3d<T>& ipoint); \
405 template point3d<T> intersection_point<T>(const line<T, 3>& line, \
406 const plane<T, 3>& plane); \
407 template void intersection_point<T, OutputIterator2d>( \
408 const T& x1, const T& y1, const T& x2, const T& y2, const T& cx, \
409 const T& cy, const T& radius, OutputIterator2d out); \
410 template void intersection_point<T, OutputIterator2d>( \
411 const segment<T, 2>& segment, const circle<T>& circle, \
412 OutputIterator2d out); \
413 template void intersection_point<T, OutputIterator2d>( \
414 const line<T, 2>& line, const circle<T>& circle, OutputIterator2d out); \
415 template void intersection_point<T, OutputIterator3d>( \
416 const line<T, 3>& line, const sphere<T>& sphere, OutputIterator3d out); \
417 template point2d<T> intersection_point<T>(const ray<T, 2>& ray1, \
418 const ray<T, 2>& ray2); \
419 template point3d<T> intersection_point<T>(const ray<T, 3>& ray, \
420 const triangle<T, 3>& triangle); \
421 template point3d<T> intersection_point<T>(const ray<T, 3>& ray, \
422 const plane<T, 3>& plane); \
423 template void intersection_point<T, OutputIterator2d>( \
424 const ray<T, 2>& ray, const circle<T>& circle, OutputIterator2d out); \
425 template void intersection_point<T, OutputIterator3d>( \
426 const ray<T, 3>& ray, const sphere<T>& sphere, OutputIterator3d out); \
427 template void intersection_point_line_to_line<T>( \
428 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
429 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
430 const T& y4, const T& z4, T& ix, T& iy, T& iz, const T& fuzzy); \
431 template T normalize_angle<T>(const T& angle); \
432 template T vertical_mirror<T>(const T& angle); \
433 template T horizontal_mirror<T>(const T& angle); \
434 template unsigned int quadrant<T>(const T& angle); \
435 template unsigned int quadrant<T>(const T& x, const T& y); \
436 template unsigned int quadrant<T>(const point2d<T>& point); \
437 template T vertex_angle<T>(const T& x1, const T& y1, const T& x2, \
438 const T& y2, const T& x3, const T& y3); \
439 template T vertex_angle<T>(const point2d<T>& point1, \
440 const point2d<T>& point2, \
441 const point2d<T>& point3); \
442 template T vertex_angle<T>(const T& x1, const T& y1, const T& z1, \
443 const T& x2, const T& y2, const T& z2, \
444 const T& x3, const T& y3, const T& z3); \
445 template T vertex_angle<T>(const point3d<T>& point1, \
446 const point3d<T>& point2, \
447 const point3d<T>& point3); \
448 template T oriented_vertex_angle<T>(const T& x1, const T& y1, const T& x2, \
449 const T& y2, const T& x3, const T& y3, \
451 template T oriented_vertex_angle<T>( \
452 const point2d<T>& point1, const point2d<T>& point2, \
453 const point2d<T>& point3, const int orient); \
454 template T cartesian_angle<T>(const T& x, const T& y); \
455 template T cartesian_angle<T>(const point2d<T>& point); \
456 template T robust_cartesian_angle<T>(const T& x, const T& y); \
457 template T robust_cartesian_angle<T>(const point2d<T>& point); \
458 template T cartesian_angle<T>(const T& x, const T& y, const T& ox, \
460 template T cartesian_angle<T>(const point2d<T>& point, \
461 const point2d<T>& origin); \
462 template T robust_cartesian_angle<T>(const T& x, const T& y, const T& ox, \
464 template T robust_cartesian_angle<T>(const point2d<T>& point, \
465 const point2d<T>& origin); \
466 template bool parallel<T>(const T& x1, const T& y1, const T& x2, \
467 const T& y2, const T& x3, const T& y3, \
468 const T& x4, const T& y4, const T& epsilon); \
469 template bool parallel<T>( \
470 const point2d<T>& point1, const point2d<T>& point2, \
471 const point2d<T>& point3, const point2d<T>& point4, const T& epsilon); \
472 template bool parallel<T>(const segment<T, 2>& segment1, \
473 const segment<T, 2>& segment2, const T& epsilon); \
474 template bool parallel<T>(const line<T, 2>& line1, const line<T, 2>& line2, \
476 template bool parallel<T>( \
477 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
478 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
479 const T& y4, const T& z4, const T& epsilon); \
480 template bool parallel<T>( \
481 const point3d<T>& point1, const point3d<T>& point2, \
482 const point3d<T>& point3, const point3d<T>& point4, const T& epsilon); \
483 template bool parallel<T>(const segment<T, 3>& segment1, \
484 const segment<T, 3>& segment2, const T& epsilon); \
485 template bool parallel<T>(const line<T, 3>& line1, const line<T, 3>& line2, \
487 template bool robust_parallel<T>( \
488 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
489 const T& y3, const T& x4, const T& y4, const T& epsilon); \
490 template bool robust_parallel<T>( \
491 const point2d<T>& point1, const point2d<T>& point2, \
492 const point2d<T>& point3, const point2d<T>& point4, const T& epsilon); \
493 template bool robust_parallel<T>(const segment<T, 2>& segment1, \
494 const segment<T, 2>& segment2, \
496 template bool robust_parallel<T>(const line<T, 2>& line1, \
497 const line<T, 2>& line2, const T& epsilon); \
498 template bool robust_parallel<T>( \
499 const line<T, 2>& line, const segment<T, 2>& segment, const T& epsilon); \
500 template bool robust_parallel<T>( \
501 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
502 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
503 const T& y4, const T& z4, const T& epsilon); \
504 template bool robust_parallel<T>( \
505 const point3d<T>& point1, const point3d<T>& point2, \
506 const point3d<T>& point3, const point3d<T>& point4, const T& epsilon); \
507 template bool robust_parallel<T>(const segment<T, 3>& segment1, \
508 const segment<T, 3>& segment2, \
510 template bool robust_parallel<T>(const line<T, 3>& line1, \
511 const line<T, 3>& line2, const T& epsilon); \
512 template bool robust_parallel<T>( \
513 const line<T, 3>& line, const segment<T, 3>& segment, const T& epsilon); \
514 template bool perpendicular<T>(const T& x1, const T& y1, const T& x2, \
515 const T& y2, const T& x3, const T& y3, \
516 const T& x4, const T& y4, const T& epsilon); \
517 template bool perpendicular<T>( \
518 const point2d<T>& point1, const point2d<T>& point2, \
519 const point2d<T>& point3, const point2d<T>& point4, const T& epsilon); \
520 template bool perpendicular<T>(const segment<T, 2>& segment1, \
521 const segment<T, 2>& segment2, \
523 template bool perpendicular<T>(const line<T, 2>& line1, \
524 const line<T, 2>& line2, const T& epsilon); \
525 template bool perpendicular<T>( \
526 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
527 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
528 const T& y4, const T& z4, const T& epsilon); \
529 template bool perpendicular<T>( \
530 const point3d<T>& point1, const point3d<T>& point2, \
531 const point3d<T>& point3, const point3d<T>& point4, const T& epsilon); \
532 template bool perpendicular<T>(const segment<T, 3>& segment1, \
533 const segment<T, 3>& segment2, \
535 template bool perpendicular<T>(const line<T, 3>& line1, \
536 const line<T, 3>& line2, const T& epsilon); \
537 template bool perpendicular<T>( \
538 const line<T, 2>& line, const segment<T, 2>& segment, const T& epsilon); \
539 template bool robust_perpendicular<T>( \
540 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
541 const T& y3, const T& x4, const T& y4, const T& epsilon); \
542 template bool robust_perpendicular<T>( \
543 const point2d<T>& point1, const point2d<T>& point2, \
544 const point2d<T>& point3, const point2d<T>& point4, const T& epsilon); \
545 template bool robust_perpendicular<T>(const segment<T, 2>& segment1, \
546 const segment<T, 2>& segment2, \
548 template bool robust_perpendicular<T>( \
549 const line<T, 2>& line1, const line<T, 2>& line2, const T& epsilon); \
550 template bool robust_perpendicular<T>( \
551 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
552 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
553 const T& y4, const T& z4, const T& epsilon); \
554 template bool robust_perpendicular<T>( \
555 const point3d<T>& point1, const point3d<T>& point2, \
556 const point3d<T>& point3, const point3d<T>& point4, const T& epsilon); \
557 template bool robust_perpendicular<T>(const segment<T, 3>& segment1, \
558 const segment<T, 3>& segment2, \
560 template bool robust_perpendicular<T>( \
561 const line<T, 3>& line1, const line<T, 3>& line2, const T& epsilon); \
562 template bool robust_perpendicular<T>( \
563 const line<T, 2>& line, const segment<T, 2>& segment, const T& epsilon); \
564 template bool line_to_line_intersect<T>( \
565 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
566 const T& y3, const T& x4, const T& y4); \
567 template bool line_to_line_intersect<T>(const line<T, 2>& line1, \
568 const line<T, 2>& line2); \
569 template bool rectangle_to_rectangle_intersect<T>( \
570 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
571 const T& y3, const T& x4, const T& y4); \
572 template bool rectangle_to_rectangle_intersect<T>( \
573 const rectangle<T>& rectangle1, const rectangle<T>& rectangle2); \
574 template bool box_to_box_intersect<T>( \
575 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
576 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
577 const T& y4, const T& z4); \
578 template bool box_to_box_intersect<T>(const box<T, 3>& box1, \
579 const box<T, 3>& box2); \
580 template bool rectangle_within_rectangle<T>( \
581 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
582 const T& y3, const T& x4, const T& y4); \
583 template bool rectangle_within_rectangle<T>(const rectangle<T>& rectangle1, \
584 const rectangle<T>& rectangle2); \
585 template bool box_within_box<T>(const T& x1, const T& y1, const T& z1, \
586 const T& x2, const T& y2, const T& z2, \
587 const T& x3, const T& y3, const T& z3, \
588 const T& x4, const T& y4, const T& z4); \
589 template bool box_within_box<T>(const box<T, 3>& box1, \
590 const box<T, 3>& box2); \
591 template bool circle_within_rectangle<T>( \
592 const T& x, const T& y, const T& radius, const T& x1, const T& y1, \
593 const T& x2, const T& y2); \
594 template bool circle_within_rectangle<T>(const circle<T>& circle, \
595 const rectangle<T>& rectangle); \
596 template bool triangle_within_rectangle<T>( \
597 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
598 const T& y3, const T& x4, const T& y4, const T& x5, const T& y5); \
599 template bool triangle_within_rectangle<T>(const triangle<T, 2>& triangle, \
600 const rectangle<T>& rectangle); \
601 template bool segment_within_rectangle<T>( \
602 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
603 const T& y3, const T& x4, const T& y4); \
604 template bool segment_within_rectangle<T>(const segment<T, 2>& segment, \
605 const rectangle<T>& rectangle); \
606 template bool quadix_within_rectangle<T>( \
607 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
608 const T& y3, const T& x4, const T& y4, const T& x5, const T& y5, \
609 const T& x6, const T& y6); \
610 template bool quadix_within_rectangle<T>(const quadix<T, 2>& quadix, \
611 const rectangle<T>& rectangle); \
612 template bool polygon_within_rectangle<T>(const polygon<T, 2>& polygon, \
613 const rectangle<T>& rectangle); \
614 template bool sphere_within_box<T>( \
615 const T& x, const T& y, const T& z, const T& radius, const T& x1, \
616 const T& y1, const T& z1, const T& x2, const T& y2, const T& z2); \
617 template bool sphere_within_box<T>(const sphere<T>& sphere, \
618 const box<T, 3>& box); \
619 template bool triangle_within_box<T>( \
620 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
621 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
622 const T& y4, const T& z4, const T& x5, const T& y5, const T& z5); \
623 template bool triangle_within_box<T>(const triangle<T, 3>& triangle, \
624 const box<T, 3>& box); \
625 template bool segment_within_box<T>(const T& x1, const T& y1, const T& z1, \
626 const T& x2, const T& y2, const T& z2, \
627 const T& x3, const T& y3, const T& z3, \
628 const T& x4, const T& y4, const T& z4); \
629 template bool segment_within_box<T>(const segment<T, 3>& segment, \
630 const box<T, 3>& box); \
631 template bool quadix_within_box<T>( \
632 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
633 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
634 const T& y4, const T& z4, const T& x5, const T& y5, const T& z5, \
635 const T& x6, const T& y6, const T& z6); \
636 template bool quadix_within_box<T>(const quadix<T, 3>& quadix, \
637 const box<T, 3>& box); \
638 template bool polygon_within_box<T>(const polygon<T, 3>& polygon, \
639 const box<T, 3>& box); \
640 template bool circle_in_circle<T>(const circle<T>& circle1, \
641 const circle<T>& circle2); \
642 template bool is_tangent<T>(const segment<T, 2>& segment, \
643 const circle<T>& circle); \
644 template bool point_of_reflection<T>( \
645 const T& sx1, const T& sy1, const T& sx2, const T& sy2, const T& p1x, \
646 const T& p1y, const T& p2x, const T& p2y, T& rpx, T& rpy); \
647 template bool point_of_reflection<T>( \
648 const segment<T, 2>& segment, const point2d<T>& point1, \
649 const point2d<T>& point2, point2d<T>& reflection_point); \
650 template segment<T, 2> edge<T>(const triangle<T, 2>& triangle, \
651 const std::size_t& edge_index); \
652 template segment<T, 3> edge<T>(const triangle<T, 3>& triangle, \
653 const std::size_t& edge_index); \
654 template segment<T, 2> edge<T>(const quadix<T, 2>& quadix, \
655 const std::size_t& edge_index); \
656 template segment<T, 3> edge<T>(const quadix<T, 3>& quadix, \
657 const std::size_t& edge_index); \
658 template segment<T, 2> edge<T>(const rectangle<T>& rectangle, \
659 const std::size_t& edge); \
660 template segment<T, 2> edge<T>(const polygon<T, 2>& polygon, \
661 const std::size_t& edge); \
662 template segment<T, 3> edge<T>(const polygon<T, 3>& polygon, \
663 const std::size_t& edge); \
664 template segment<T, 2> opposing_edge<T>(const triangle<T, 2>& triangle, \
665 const std::size_t& corner); \
666 template segment<T, 3> opposing_edge<T>(const triangle<T, 3>& triangle, \
667 const std::size_t& corner); \
668 template segment<T, 2> reverse_segment<T>(const segment<T, 2>& segment); \
669 template segment<T, 3> reverse_segment<T>(const segment<T, 3>& segment); \
670 template point2d<T> rectangle_corner<T>(const rectangle<T>& rectangle, \
671 const std::size_t& corner_index); \
672 template point3d<T> box_corner<T>(const box<T, 3>& box, \
673 const std::size_t& corner_index); \
674 template line<T, 2> triangle_bisector<T>(const triangle<T, 2>& triangle, \
675 const std::size_t& bisector); \
676 template line<T, 3> triangle_bisector<T>(const triangle<T, 3>& triangle, \
677 const std::size_t& bisector); \
678 template line<T, 2> triangle_external_bisector<T>( \
679 const triangle<T, 2>& triangle, const std::size_t& corner, \
680 const std::size_t& opposing_corner); \
681 template line<T, 3> triangle_external_bisector<T>( \
682 const triangle<T, 3>& triangle, const std::size_t& corner, \
683 const std::size_t& opposing_corner); \
684 template line<T, 2> triangle_median<T>(const triangle<T, 2>& triangle, \
685 const std::size_t& median); \
686 template line<T, 3> triangle_median<T>(const triangle<T, 3>& triangle, \
687 const std::size_t& median); \
688 template line<T, 2> triangle_symmedian<T>(const triangle<T, 2>& triangle, \
689 const std::size_t& symmedian); \
690 template line<T, 3> triangle_symmedian<T>(const triangle<T, 3>& triangle, \
691 const std::size_t& symmedian); \
692 template line<T, 2> euler_line<T>(const triangle<T, 2>& triangle); \
693 template line<T, 3> euler_line<T>(const triangle<T, 3>& triangle); \
694 template point2d<T> exmedian_point<T>(const triangle<T, 2>& triangle, \
695 const std::size_t& corner); \
696 template point3d<T> exmedian_point<T>(const triangle<T, 3>& triangle, \
697 const std::size_t& corner); \
698 template point2d<T> feuerbach_point<T>(const triangle<T, 2>& triangle); \
699 template line<T, 2> confined_triangle_median<T>( \
700 const triangle<T, 2>& triangle, const point2d<T>& point, \
701 const std::size_t& median); \
702 template line<T, 3> confined_triangle_median<T>( \
703 const triangle<T, 3>& triangle, const point3d<T>& point, \
704 const std::size_t& median); \
705 template line<T, 2> create_parallel_line_on_point<T>( \
706 const line<T, 2>& line, const point2d<T>& point); \
707 template line<T, 3> create_parallel_line_on_point<T>( \
708 const line<T, 3>& line, const point3d<T>& point); \
709 template segment<T, 2> create_parallel_segment_on_point<T>( \
710 const line<T, 2>& line, const point2d<T>& point); \
711 template segment<T, 3> create_parallel_segment_on_point<T>( \
712 const line<T, 3>& line, const point3d<T>& point); \
713 template bool point_in_rectangle<T>(const T& px, const T& py, const T& x1, \
714 const T& y1, const T& x2, const T& y2); \
715 template bool point_in_rectangle<T>(const point2d<T>& point, const T& x1, \
716 const T& y1, const T& x2, const T& y2); \
717 template bool point_in_rectangle<T>(const T& px, const T& py, \
718 const rectangle<T>& rectangle); \
719 template bool point_in_rectangle<T>(const point2d<T>& point, \
720 const rectangle<T>& rectangle); \
721 template bool point_in_rectangle<T>(const point2d<T>& point, \
722 const point2d<T>& rect_point1, \
723 point2d<T>& rect_point2); \
724 template bool point_in_rectangle<T>(const point2d<T>& point, \
725 const segment<T, 2>& segment); \
726 template bool point_in_box<T>(const T& px, const T& py, const T& pz, \
727 const T& x1, const T& y1, const T& z1, \
728 const T& x2, const T& y2, const T& z2); \
729 template bool point_in_box<T>(const point3d<T>& point, const T& x1, \
730 const T& y1, const T& z1, const T& x2, \
731 const T& y2, const T& z2); \
732 template bool point_in_box<T>(const T& px, const T& py, const T& pz, \
733 const box<T, 3>& box); \
734 template bool point_in_box<T>(const point3d<T>& point, \
735 const box<T, 3>& box); \
736 template bool point_in_box<T>(const point3d<T>& point, \
737 const point3d<T>& box_point1, \
738 const point3d<T>& box_point2); \
739 template bool point_in_box<T>(const point3d<T>& point, \
740 const segment<T, 3>& segment); \
741 template bool point_in_triangle<T>(const T& px, const T& py, const T& x1, \
742 const T& y1, const T& x2, const T& y2, \
743 const T& x3, const T& y3); \
744 template bool point_in_triangle<T>( \
745 const point2d<T>& point, const point2d<T>& point1, \
746 const point2d<T>& point2, const point2d<T>& point3); \
747 template bool point_in_triangle<T>(const T& px, const T& py, \
748 const triangle<T, 2>& triangle); \
749 template bool point_in_triangle<T>(const point2d<T>& point, \
750 const triangle<T, 2>& triangle); \
751 template bool point_in_quadix<T>( \
752 const T& px, const T& py, const T& x1, const T& y1, const T& x2, \
753 const T& y2, const T& x3, const T& y3, const T& x4, const T& y4); \
754 template bool point_in_quadix<T>( \
755 const point2d<T>& point, const point2d<T>& point1, \
756 const point2d<T>& point2, const point2d<T>& point3, \
757 const point2d<T>& point4); \
758 template bool point_in_quadix<T>(const T& px, const T& py, \
759 const quadix<T, 2>& quadix); \
760 template bool point_in_quadix<T>(const point2d<T>& point, \
761 const quadix<T, 2>& quadix); \
762 template bool point_in_circle<T>(const T& px, const T& py, const T& cx, \
763 const T& cy, const T& radius); \
764 template bool point_in_circle<T>(const T& px, const T& py, \
765 const circle<T>& circle); \
766 template bool point_in_circle<T>(const point2d<T>& point, \
767 const circle<T>& circle); \
768 template bool point_in_sphere<T>(const T& px, const T& py, const T& pz, \
769 const T& cx, const T& cy, const T& cz, \
771 template bool point_in_sphere<T>(const T& px, const T& py, const T& pz, \
772 const sphere<T>& sphere); \
773 template bool point_in_sphere<T>(const point3d<T>& point, \
774 const sphere<T>& sphere); \
775 template bool point_in_three_point_circle<T>( \
776 const T& px, const T& py, const T& x1, const T& y1, const T& x2, \
777 const T& y2, const T& x3, const T& y3); \
778 template bool point_in_three_point_circle<T>( \
779 const point2d<T>& point, const point2d<T>& point1, \
780 const point2d<T>& point2, const point2d<T>& point3); \
781 template bool point_in_three_point_circle<T>(const point2d<T>& point, \
782 const triangle<T, 2> triangle); \
783 template bool point_in_focus_area<T>(const T& px, const T& py, const T& x1, \
784 const T& y1, const T& x2, const T& y2, \
785 const T& x3, const T& y3); \
786 template bool point_in_focus_area<T>( \
787 const point2d<T>& point, const point2d<T>& point1, \
788 const point2d<T>& point2, const point2d<T>& point3); \
789 template bool point_on_segment<T>(const point2d<T>& point, \
790 const segment<T, 2>& segment); \
791 template bool point_on_segment<T>(const point3d<T>& point, \
792 const segment<T, 3>& segment); \
793 template bool point_on_ray<T>(const T& px, const T& py, const T& ox, \
794 const T& oy, const T& dx, const T& dy); \
795 template bool point_on_ray<T>(const T& px, const T& py, const T& pz, \
796 const T& ox, const T& oy, const T& oz, \
797 const T& dx, const T& dy, const T& dz); \
798 template bool point_on_ray<T>(const point2d<T>& point, \
799 const ray<T, 2>& ray); \
800 template bool point_on_ray<T>(const point3d<T>& point, \
801 const ray<T, 3>& ray); \
802 template bool point_on_rectangle<T>(const T& px, const T& py, const T& x1, \
803 const T& y1, const T& x2, const T& y2); \
804 template bool point_on_rectangle<T>(const point2d<T>& point, const T& x1, \
805 const T& y1, const T& x2, const T& y2); \
806 template bool point_on_rectangle<T>(const T& px, const T& py, \
807 const rectangle<T>& rectangle); \
808 template bool point_on_rectangle<T>(const point2d<T>& point, \
809 const rectangle<T>& rectangle); \
810 template bool point_on_triangle<T>(const T& px, const T& py, const T& x1, \
811 const T& y1, const T& x2, const T& y2, \
812 const T& x3, const T& y3); \
813 template bool point_on_triangle<T>( \
814 const point2d<T>& point, const point2d<T>& point1, \
815 const point2d<T>& point2, const point2d<T>& point3); \
816 template bool point_on_triangle<T>(const T& px, const T& py, \
817 const triangle<T, 2>& triangle); \
818 template bool point_on_triangle<T>(const point2d<T>& point, \
819 const triangle<T, 2>& triangle); \
820 template bool point_on_quadix<T>( \
821 const T& px, const T& py, const T& x1, const T& y1, const T& x2, \
822 const T& y2, const T& x3, const T& y3, const T& x4, const T& y4); \
823 template bool point_on_quadix<T>( \
824 const point2d<T>& point, const point2d<T>& point1, \
825 const point2d<T>& point2, const point2d<T>& point3, \
826 const point2d<T>& point4); \
827 template bool point_on_quadix<T>(const T& px, const T& py, \
828 const quadix<T, 2>& quadix); \
829 template bool point_on_quadix<T>(const point2d<T>& point, \
830 const quadix<T, 2>& quadix); \
831 template bool point_on_circle<T>(const T& px, const T& py, const T& cx, \
832 const T& cy, const T& radius); \
833 template bool point_on_circle<T>(const T& px, const T& py, \
834 const circle<T>& circle); \
835 template bool point_on_circle<T>(const point2d<T>& point, \
836 const circle<T>& circle); \
837 template bool point_on_bezier<T>(const point2d<T>& point, \
838 const quadratic_bezier<T, 2>& bezier, \
839 const std::size_t& steps, const T& fuzzy); \
840 template bool point_on_bezier<T>(const point2d<T>& point, \
841 const cubic_bezier<T, 2>& bezier, \
842 const std::size_t& steps, const T& fuzzy); \
843 template bool point_on_bezier<T>(const point3d<T>& point, \
844 const quadratic_bezier<T, 3>& bezier, \
845 const std::size_t& steps, const T& fuzzy); \
846 template bool point_on_bezier<T>(const point3d<T>& point, \
847 const cubic_bezier<T, 3>& bezier, \
848 const std::size_t& steps, const T& fuzzy); \
849 template point2d<T> isogonal_conjugate<T>(const point2d<T>& point, \
850 const triangle<T, 2>& triangle); \
851 template point3d<T> isogonal_conjugate<T>(const point3d<T>& point, \
852 const triangle<T, 3>& triangle); \
853 template point2d<T> cyclocevian_conjugate<T>( \
854 const point2d<T>& point, const triangle<T, 2>& triangle); \
855 template point2d<T> symmedian_point<T>(const triangle<T, 2>& triangle); \
856 template point3d<T> symmedian_point<T>(const triangle<T, 3>& triangle); \
857 template void create_equilateral_triangle<T>( \
858 const T& x1, const T& y1, const T& x2, const T& y2, T& x3, T& y3); \
859 template void create_equilateral_triangle<T>( \
860 const point2d<T>& point1, const point2d<T>& point2, point2d<T>& point3); \
861 template triangle<T, 2> create_equilateral_triangle<T>( \
862 const T& x1, const T& y1, const T& x2, const T& y2); \
863 template triangle<T, 2> create_equilateral_triangle<T>( \
864 const point2d<T>& point1, const point2d<T>& point2); \
865 template triangle<T, 2> create_equilateral_triangle<T>( \
866 const T& cx, const T& cy, const T& side_length); \
867 template triangle<T, 2> create_equilateral_triangle<T>( \
868 const point2d<T>& center_point, const T& side_length); \
869 template triangle<T, 2> create_isosceles_triangle<T>( \
870 const point2d<T>& point1, const point2d<T>& point2, const T& angle); \
871 template triangle<T, 2> create_isosceles_triangle<T>( \
872 const segment<T, 2>& segment, const T& angle); \
873 template triangle<T, 2> create_triangle<T>( \
874 const point2d<T>& point1, const point2d<T>& point2, const T& angle1, \
876 template triangle<T, 2> create_triangle<T>( \
877 const segment<T, 2>& segment, const T& angle1, const T& angle2); \
878 template triangle<T, 2> create_morley_triangle<T>( \
879 const triangle<T, 2>& triangle); \
880 template triangle<T, 2> create_cevian_triangle<T>( \
881 const triangle<T, 2>& triangle, const point2d<T>& point); \
882 template triangle<T, 3> create_cevian_triangle<T>( \
883 const triangle<T, 3>& triangle, const point3d<T>& point); \
884 template triangle<T, 2> create_anticevian_triangle<T>( \
885 const triangle<T, 2>& triangle, const point2d<T>& point); \
886 template triangle<T, 3> create_anticevian_triangle<T>( \
887 const triangle<T, 3>& triangle, const point3d<T>& point); \
888 template triangle<T, 2> create_anticomplementary_triangle<T>( \
889 const triangle<T, 2>& triangle); \
890 template triangle<T, 3> create_anticomplementary_triangle<T>( \
891 const triangle<T, 3>& triangle); \
892 template triangle<T, 2> create_inner_napoleon_triangle<T>( \
893 const triangle<T, 2>& triangle); \
894 template triangle<T, 2> create_outer_napoleon_triangle<T>( \
895 const triangle<T, 2>& triangle); \
896 template triangle<T, 2> create_inner_vecten_triangle<T>( \
897 const triangle<T, 2>& triangle); \
898 template triangle<T, 2> create_outer_vecten_triangle<T>( \
899 const triangle<T, 2>& triangle); \
900 template triangle<T, 2> create_medial_triangle<T>( \
901 const triangle<T, 2>& triangle); \
902 template triangle<T, 3> create_medial_triangle<T>( \
903 const triangle<T, 3>& triangle); \
904 template triangle<T, 2> create_contact_triangle<T>( \
905 const triangle<T, 2>& triangle); \
906 template triangle<T, 3> create_contact_triangle<T>( \
907 const triangle<T, 3>& triangle); \
908 template triangle<T, 2> create_symmedial_triangle<T>( \
909 const triangle<T, 2>& triangle, const point2d<T>& point); \
910 template triangle<T, 2> create_orthic_triangle<T>( \
911 const triangle<T, 2>& triangle); \
912 template triangle<T, 3> create_orthic_triangle<T>( \
913 const triangle<T, 3>& triangle); \
914 template triangle<T, 2> create_pedal_triangle<T>( \
915 const point2d<T>& point, const triangle<T, 2>& triangle); \
916 template triangle<T, 3> create_pedal_triangle<T>( \
917 const point3d<T>& point, const triangle<T, 3>& triangle); \
918 template triangle<T, 2> create_antipedal_triangle<T>( \
919 const point2d<T>& point, const triangle<T, 2>& triangle); \
920 template triangle<T, 2> create_excentral_triangle<T>( \
921 const triangle<T, 2>& triangle); \
922 template triangle<T, 3> create_excentral_triangle<T>( \
923 const triangle<T, 3>& triangle); \
924 template triangle<T, 2> create_incentral_triangle<T>( \
925 const triangle<T, 2>& triangle); \
926 template triangle<T, 3> create_incentral_triangle<T>( \
927 const triangle<T, 3>& triangle); \
928 template triangle<T, 2> create_intouch_triangle<T>( \
929 const triangle<T, 2>& triangle); \
930 template triangle<T, 2> create_extouch_triangle<T>( \
931 const triangle<T, 2>& triangle); \
932 template triangle<T, 3> create_extouch_triangle<T>( \
933 const triangle<T, 3>& triangle); \
934 template triangle<T, 2> create_feuerbach_triangle<T>( \
935 const triangle<T, 2>& triangle); \
936 template triangle<T, 2> create_circumcevian_triangle<T>( \
937 const triangle<T, 2>& triangle, const point2d<T>& point); \
938 template triangle<T, 2> create_circummedial_triangle<T>( \
939 const triangle<T, 2>& triangle); \
940 template triangle<T, 2> create_first_brocard_triangle<T>( \
941 const triangle<T, 2>& triangle); \
942 template void create_right_triangle<T>( \
943 const wykobi::point2d<T>& p1, const wykobi::point2d<T>& p2, \
944 wykobi::point2d<T>& c1, wykobi::point2d<T>& c2); \
945 template void create_equilateral_quadix<T>(const T& x1, const T& y1, \
946 const T& x2, const T& y2, T& x3, \
947 T& y3, T& x4, T& y4); \
948 template void create_equilateral_quadix<T>( \
949 const point2d<T>& point1, const point2d<T>& point2, point2d<T>& point3, \
950 point2d<T>& point4); \
951 template quadix<T, 2> create_equilateral_quadix<T>( \
952 const T& x1, const T& y1, const T& x2, const T& y2); \
953 template quadix<T, 2> create_equilateral_quadix<T>( \
954 const point2d<T>& point1, const point2d<T>& point2); \
955 template quadix<T, 2> create_equilateral_quadix<T>( \
956 const segment<T, 2>& segment); \
957 template quadix<T, 2> create_equilateral_quadix<T>(const T& cx, const T& cy, \
958 const T& side_length); \
959 template quadix<T, 2> create_equilateral_quadix<T>( \
960 const point2d<T>& center_point, const T& side_length); \
961 template void torricelli_point<T>(const T& x1, const T& y1, const T& x2, \
962 const T& y2, const T& x3, const T& y3, \
964 template point2d<T> torricelli_point<T>(const point2d<T>& point1, \
965 const point2d<T>& point2, \
966 const point2d<T>& point3); \
967 template point2d<T> torricelli_point<T>(const triangle<T, 2>& triangle); \
968 template bool trilateration<T>( \
969 const T& c0x, const T& c0y, const T& c0r, const T& c1x, const T& c1y, \
970 const T& c1r, const T& c2x, const T& c2y, const T& c2r, T& px, T& py); \
971 template point2d<T> trilateration<T>( \
972 const circle<T>& c0, const circle<T>& c1, const circle<T>& c2); \
973 template void incenter<T>(const T& x1, const T& y1, const T& x2, \
974 const T& y2, const T& x3, const T& y3, T& px, \
976 template void incenter<T>(const T& x1, const T& y1, const T& z1, \
977 const T& x2, const T& y2, const T& z2, \
978 const T& x3, const T& y3, const T& z3, T& px, \
980 template point2d<T> incenter<T>(const point2d<T>& point1, \
981 const point2d<T>& point2, \
982 const point2d<T>& point3); \
983 template point3d<T> incenter<T>(const point3d<T>& point1, \
984 const point3d<T>& point2, \
985 const point3d<T>& point3); \
986 template point2d<T> incenter<T>(const triangle<T, 2>& triangle); \
987 template point3d<T> incenter<T>(const triangle<T, 3>& triangle); \
988 template void circumcenter<T>(const T& x1, const T& y1, const T& x2, \
989 const T& y2, const T& x3, const T& y3, T& px, \
991 template void circumcenter<T>(const T& x1, const T& y1, const T& z1, \
992 const T& x2, const T& y2, const T& z2, \
993 const T& x3, const T& y3, const T& z3, T& px, \
995 template point2d<T> circumcenter<T>(const point2d<T>& point1, \
996 const point2d<T>& point2, \
997 const point2d<T>& point3); \
998 template point3d<T> circumcenter<T>(const point3d<T>& point1, \
999 const point3d<T>& point2, \
1000 const point3d<T>& point3); \
1001 template point2d<T> circumcenter<T>(const triangle<T, 2>& triangle); \
1002 template point3d<T> circumcenter<T>(const triangle<T, 3>& triangle); \
1003 template circle<T> circumcircle<T>(const T& x1, const T& y1, const T& x2, \
1004 const T& y2, const T& x3, const T& y3); \
1005 template circle<T> circumcircle<T>(const point2d<T>& point1, \
1006 const point2d<T>& point2, \
1007 const point2d<T>& point3); \
1008 template circle<T> circumcircle<T>(const triangle<T, 2>& triangle); \
1009 template sphere<T> circumsphere<T>(const point3d<T>& point1, \
1010 const point3d<T>& point2, \
1011 const point3d<T>& point3); \
1012 template sphere<T> circumsphere<T>(const T& x1, const T& y1, const T& z1, \
1013 const T& x2, const T& y2, const T& z2, \
1014 const T& x3, const T& y3, const T& z3); \
1015 template sphere<T> circumsphere<T>(const triangle<T, 3>& triangle); \
1016 template circle<T> inscribed_circle<T>(const T& x1, const T& y1, \
1017 const T& x2, const T& y2, \
1018 const T& x3, const T& y3); \
1019 template circle<T> inscribed_circle<T>(const point2d<T>& point1, \
1020 const point2d<T>& point2, \
1021 const point2d<T>& point3); \
1022 template circle<T> inscribed_circle<T>(const triangle<T, 2>& triangle); \
1023 template sphere<T> inscribed_sphere<T>( \
1024 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1025 const T& z2, const T& x3, const T& y3, const T& z3); \
1026 template sphere<T> inscribed_sphere<T>(const point3d<T>& point1, \
1027 const point3d<T>& point2, \
1028 const point3d<T>& point3); \
1029 template sphere<T> inscribed_sphere<T>(const triangle<T, 3>& triangle); \
1030 template circle<T> nine_point_circle<T>(const T& x1, const T& y1, \
1031 const T& x2, const T& y2, \
1032 const T& x3, const T& y3); \
1033 template circle<T> nine_point_circle<T>(const point2d<T>& point1, \
1034 const point2d<T>& point2, \
1035 const point2d<T>& point3); \
1036 template circle<T> nine_point_circle<T>(const triangle<T, 2>& triangle); \
1037 template point2d<T> orthocenter<T>(const triangle<T, 2>& triangle); \
1038 template point3d<T> orthocenter<T>(const triangle<T, 3>& triangle); \
1039 template point2d<T> excenter<T>(const triangle<T, 2>& triangle, \
1040 const std::size_t& corner); \
1041 template point3d<T> excenter<T>(const triangle<T, 3>& triangle, \
1042 const std::size_t& corner); \
1043 template circle<T> excircle<T>(const triangle<T, 2>& triangle, \
1044 const std::size_t& corner); \
1045 template circle<T> mandart_circle<T>(const triangle<T, 2>& triangle); \
1046 template circle<T> brocard_circle<T>(const triangle<T, 2>& triangle); \
1047 template circle<T> invert_circle_across_circle<T>(const circle<T>& circle1, \
1048 const circle<T>& circle2); \
1049 template sphere<T> invert_sphere_across_sphere<T>(const sphere<T>& sphere1, \
1050 const sphere<T>& sphere2); \
1051 template void circle_tangent_points<T>( \
1052 const circle<T>& circle, const point2d<T>& point, point2d<T>& point1, \
1053 point2d<T>& point2); \
1054 template line<T, 2> tangent_line<T>(const circle<T>& circle, \
1055 const point2d<T>& point); \
1056 template line<T, 2> create_line_from_bisector<T>(const T& x1, const T& y1, \
1057 const T& x2, const T& y2, \
1058 const T& x3, const T& y3); \
1059 template segment<T, 2> create_segment_from_bisector<T>( \
1060 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
1062 template line<T, 3> create_line_from_bisector<T>( \
1063 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1064 const T& z2, const T& x3, const T& y3, const T& z3); \
1065 template segment<T, 3> create_segment_from_bisector<T>( \
1066 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1067 const T& z2, const T& x3, const T& y3, const T& z3); \
1068 template line<T, 2> create_line_from_bisector<T>(const point2d<T>& point1, \
1069 const point2d<T>& point2, \
1070 const point2d<T>& point3); \
1071 template segment<T, 2> create_segment_from_bisector<T>( \
1072 const point2d<T>& point1, const point2d<T>& point2, \
1073 const point2d<T>& point3); \
1074 template ray<T, 2> create_ray_from_bisector<T>(const point2d<T>& point1, \
1075 const point2d<T>& point2, \
1076 const point2d<T>& point3); \
1077 template line<T, 3> create_line_from_bisector<T>(const point3d<T>& point1, \
1078 const point3d<T>& point2, \
1079 const point3d<T>& point3); \
1080 template segment<T, 3> create_segment_from_bisector<T>( \
1081 const point3d<T>& point1, const point3d<T>& point2, \
1082 const point3d<T>& point3); \
1083 template ray<T, 3> create_ray_from_bisector<T>(const point3d<T>& point1, \
1084 const point3d<T>& point2, \
1085 const point3d<T>& point3); \
1086 template line<T, 2> create_perpendicular_bisector<T>( \
1087 const T& x1, const T& y1, const T& x2, const T& y2); \
1088 template line<T, 2> create_perpendicular_bisector<T>( \
1089 const point2d<T>& point1, const point2d<T>& point2); \
1090 template line<T, 2> create_perpendicular_bisector<T>( \
1091 const segment<T, 2>& segment); \
1092 template line<T, 2> create_perpendicular_line_at_end_point<T>( \
1093 const line<T, 2>& line); \
1094 template void closest_point_on_segment_from_point<T>( \
1095 const T& x1, const T& y1, const T& x2, const T& y2, const T& px, \
1096 const T& py, T& nx, T& ny); \
1097 template void closest_point_on_segment_from_point<T>( \
1098 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1099 const T& z2, const T& px, const T& py, const T& pz, T& nx, T& ny, \
1101 template void closest_point_on_line_from_point<T>( \
1102 const T& x1, const T& y1, const T& x2, const T& y2, const T& px, \
1103 const T& py, T& nx, T& ny); \
1104 template void closest_point_on_line_from_point<T>( \
1105 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1106 const T& z2, const T& px, const T& py, const T& pz, T& nx, T& ny, \
1108 template void order_sensitive_closest_point_on_segment_from_point<T>( \
1109 const T& x1, const T& y1, const T& x2, const T& y2, const T& px, \
1110 const T& py, T& nx, T& ny); \
1111 template void order_sensitive_closest_point_on_segment_from_point<T>( \
1112 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1113 const T& z2, const T& px, const T& py, const T& pz, T& nx, T& ny, \
1115 template void order_sensitive_closest_point_on_line_from_point<T>( \
1116 const T& x1, const T& y1, const T& x2, const T& y2, const T& px, \
1117 const T& py, T& nx, T& ny); \
1118 template void order_sensitive_closest_point_on_line_from_point<T>( \
1119 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1120 const T& z2, const T& px, const T& py, const T& pz, T& nx, T& ny, \
1122 template void closest_point_on_ray_from_point<T>( \
1123 const T& ox, const T& oy, const T& dx, const T& dy, const T& px, \
1124 const T& py, T& nx, T& ny); \
1125 template void closest_point_on_ray_from_point<T>( \
1126 const T& ox, const T& oy, const T& oz, const T& dx, const T& dy, \
1127 const T& dz, const T& px, const T& py, const T& pz, T& nx, T& ny, \
1129 template point2d<T> closest_point_on_segment_from_point<T>( \
1130 const T& x1, const T& y1, const T& x2, const T& y2, const T& px, \
1132 template point3d<T> closest_point_on_segment_from_point<T>( \
1133 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1134 const T& z2, const T& px, const T& py, const T& pz); \
1135 template point2d<T> closest_point_on_segment_from_point<T>( \
1136 const segment<T, 2>& segment, const point2d<T>& point); \
1137 template point3d<T> closest_point_on_segment_from_point<T>( \
1138 const segment<T, 3>& segment, const point3d<T>& point); \
1139 template point2d<T> closest_point_on_line_from_point<T>( \
1140 const T& x1, const T& y1, const T& x2, const T& y2, const T& px, \
1142 template point3d<T> closest_point_on_line_from_point<T>( \
1143 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1144 const T& z2, const T& px, const T& py, const T& pz); \
1145 template point2d<T> closest_point_on_line_from_point<T>( \
1146 const line<T, 2>& line, const point2d<T>& point); \
1147 template point3d<T> closest_point_on_line_from_point<T>( \
1148 const line<T, 3>& line, const point3d<T>& point); \
1149 template point2d<T> closest_point_on_ray_from_point<T>( \
1150 const T& ox, const T& oy, const T& dx, const T& dy, const T& px, \
1152 template point3d<T> closest_point_on_ray_from_point<T>( \
1153 const T& ox, const T& oy, const T& oz, const T& dx, const T& dy, \
1154 const T& dz, const T& px, const T& py, const T& pz); \
1155 template point2d<T> closest_point_on_ray_from_point<T>( \
1156 const ray<T, 2>& ray, const point2d<T>& point); \
1157 template point3d<T> closest_point_on_ray_from_point<T>( \
1158 const ray<T, 3>& ray, const point3d<T>& point); \
1159 template void closest_point_on_triangle_from_point<T>( \
1160 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
1161 const T& y3, const T& px, const T& py, T& nx, T& ny); \
1162 template point2d<T> closest_point_on_triangle_from_point<T>( \
1163 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
1164 const T& y3, const T& px, const T& py); \
1165 template point2d<T> closest_point_on_triangle_from_point<T>( \
1166 const triangle<T, 2>& triangle, const T& px, const T& py); \
1167 template point2d<T> closest_point_on_triangle_from_point<T>( \
1168 const triangle<T, 2>& triangle, const point2d<T>& point); \
1169 template void closest_point_on_triangle_from_point<T>( \
1170 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1171 const T& z2, const T& x3, const T& y3, const T& z3, const T& px, \
1172 const T& py, const T& pz, T& nx, T& ny, T& nz); \
1173 template point3d<T> closest_point_on_triangle_from_point<T>( \
1174 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1175 const T& z2, const T& x3, const T& y3, const T& z3, const T& px, \
1176 const T& py, const T& pz); \
1177 template point3d<T> closest_point_on_triangle_from_point<T>( \
1178 const triangle<T, 3>& triangle, const T& px, const T& py, const T& pz); \
1179 template point3d<T> closest_point_on_triangle_from_point<T>( \
1180 const triangle<T, 3>& triangle, const point3d<T>& point); \
1181 template void closest_point_on_rectangle_from_point<T>( \
1182 const T& x1, const T& y1, const T& x2, const T& y2, const T& px, \
1183 const T& py, T& nx, T& ny); \
1184 template point2d<T> closest_point_on_rectangle_from_point<T>( \
1185 const T& x1, const T& y1, const T& x2, const T& y2, const T& px, \
1187 template point2d<T> closest_point_on_rectangle_from_point<T>( \
1188 const rectangle<T>& rectangle, const T& px, const T& py); \
1189 template point2d<T> closest_point_on_rectangle_from_point<T>( \
1190 const rectangle<T>& rectangle, const point2d<T>& point); \
1191 template void closest_point_on_box_from_point<T>( \
1192 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1193 const T& z2, const T& px, const T& py, const T& pz, T& nx, T& ny, \
1195 template point3d<T> closest_point_on_box_from_point<T>( \
1196 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1197 const T& z2, const T& px, const T& py, const T& pz); \
1198 template point3d<T> closest_point_on_box_from_point<T>( \
1199 const box<T, 3>& box, const T& px, const T& py, const T& pz); \
1200 template point3d<T> closest_point_on_box_from_point<T>( \
1201 const box<T, 3>& box, const point3d<T>& point); \
1202 template void closest_point_on_quadix_from_point<T>( \
1203 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
1204 const T& y3, const T& x4, const T& y4, const T& px, const T& py, T& nx, \
1206 template point2d<T> closest_point_on_quadix_from_point<T>( \
1207 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
1208 const T& y3, const T& x4, const T& y4, const T& px, const T& py); \
1209 template point2d<T> closest_point_on_quadix_from_point<T>( \
1210 const quadix<T, 2>& quadix, const point2d<T>& point); \
1211 template point2d<T> closest_point_on_circle_from_point<T>( \
1212 const circle<T>& circle, const point2d<T>& point); \
1213 template point3d<T> closest_point_on_sphere_from_point<T>( \
1214 const sphere<T>& sphere, const point3d<T>& point); \
1215 template point2d<T> closest_point_on_aabbb_from_point<T>( \
1216 const rectangle<T>& rectangle, const point2d<T>& point); \
1217 template point2d<T> closest_point_on_circle_from_segment<T>( \
1218 const circle<T>& circle, const segment<T, 2>& segment); \
1219 template point3d<T> closest_point_on_sphere_from_segment<T>( \
1220 const sphere<T>& sphere, const segment<T, 3>& segment); \
1221 template point3d<T> closest_point_on_plane_from_point<T>( \
1222 const plane<T, 3>& plane, const point3d<T>& point); \
1223 template point2d<T> closest_point_on_bezier_from_point<T>( \
1224 const quadratic_bezier<T, 2>& bezier, const point2d<T>& point, \
1225 const std::size_t& steps); \
1226 template point2d<T> closest_point_on_bezier_from_point<T>( \
1227 const cubic_bezier<T, 2>& bezier, const point2d<T>& point, \
1228 const std::size_t& steps); \
1229 template point3d<T> closest_point_on_bezier_from_point<T>( \
1230 const quadratic_bezier<T, 3>& bezier, const point3d<T>& point, \
1231 const std::size_t& steps); \
1232 template point3d<T> closest_point_on_bezier_from_point<T>( \
1233 const cubic_bezier<T, 3>& bezier, const point3d<T>& point, \
1234 const std::size_t& steps); \
1235 template point2d<T> closest_point_on_circle_from_circle<T>( \
1236 const circle<T>& circle1, const circle<T>& circle2); \
1237 template point3d<T> closest_point_on_sphere_from_sphere<T>( \
1238 const sphere<T>& sphere1, const sphere<T>& sphere2); \
1239 template point2d<T> closest_point_on_polygon_from_point<T>( \
1240 const polygon<T, 2>& polygon, const point2d<T>& point); \
1241 template T minimum_distance_from_point_to_segment<T>( \
1242 const T& px, const T& py, const T& x1, const T& y1, const T& x2, \
1244 template T minimum_distance_from_point_to_segment<T>( \
1245 const T& px, const T& py, const T& pz, const T& x1, const T& y1, \
1246 const T& z1, const T& x2, const T& y2, const T& z2); \
1247 template T minimum_distance_from_point_to_segment<T>( \
1248 const point2d<T>& point, const segment<T, 2>& segment); \
1249 template T minimum_distance_from_point_to_segment<T>( \
1250 const point3d<T>& point, const segment<T, 3>& segment); \
1251 template T minimum_distance_from_point_to_line<T>(const T& px, const T& py, \
1252 const T& x1, const T& y1, \
1253 const T& x2, const T& y2); \
1254 template T minimum_distance_from_point_to_line<T>( \
1255 const T& px, const T& py, const T& pz, const T& x1, const T& y1, \
1256 const T& z1, const T& x2, const T& y2, const T& z2); \
1257 template T minimum_distance_from_point_to_line<T>(const point2d<T>& point, \
1258 const line<T, 2>& line); \
1259 template T minimum_distance_from_point_to_line<T>(const point3d<T>& point, \
1260 const line<T, 3>& line); \
1261 template T minimum_distance_from_point_to_triangle<T>( \
1262 const T& px, const T& py, const T& x1, const T& y1, const T& x2, \
1263 const T& y2, const T& x3, const T& y3); \
1264 template T minimum_distance_from_point_to_triangle<T>( \
1265 const point2d<T>& point, const triangle<T, 2>& triangle); \
1266 template T minimum_distance_from_point_to_rectangle<T>( \
1267 const T& px, const T& py, const T& x1, const T& y1, const T& x2, \
1269 template T minimum_distance_from_point_to_rectangle<T>( \
1270 const point2d<T>& point, const rectangle<T>& rectangle); \
1271 template void segment_mid_point<T>(const T& x1, const T& y1, const T& x2, \
1272 const T& y2, T& midx, T& midy); \
1273 template void segment_mid_point<T>(const segment<T, 2>& segment, T& midx, \
1275 template point2d<T> segment_mid_point<T>(const point2d<T>& point1, \
1276 const point2d<T>& point2); \
1277 template point2d<T> segment_mid_point<T>(const segment<T, 2>& segment); \
1278 template void segment_mid_point<T>(const T& x1, const T& y1, const T& z1, \
1279 const T& x2, const T& y2, const T& z2, \
1280 T& midx, T& midy, T& midz); \
1281 template void segment_mid_point<T>(const segment<T, 3>& segment, T& midx, \
1282 T& midy, T& midz); \
1283 template point3d<T> segment_mid_point<T>(const point3d<T>& point1, \
1284 const point3d<T>& point2); \
1285 template point3d<T> segment_mid_point<T>(const segment<T, 3>& segment); \
1286 template void centroid<T>(const T& x1, const T& y1, const T& x2, \
1287 const T& y2, T& x, T& y); \
1288 template void centroid<T>( \
1289 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1290 const T& z2, const T& x3, const T& y3, const T& z3, T& x, T& y, T& z); \
1291 template point2d<T> centroid<T>(const point2d<T>& point1, \
1292 const point2d<T>& point2); \
1293 template point2d<T> centroid<T>(const segment<T, 2>& segment); \
1294 template void centroid<T>(const T& x1, const T& y1, const T& x2, \
1295 const T& y2, const T& x3, const T& y3, T& x, \
1297 template void centroid<T>(const T& x1, const T& y1, const T& x2, \
1298 const T& y2, const T& x3, const T& y3, \
1299 const T& x4, const T& y4, T& x, T& y); \
1300 template void centroid<T>(const triangle<T, 2>& triangle, T& x, T& y); \
1301 template void centroid<T>(const triangle<T, 3>& triangle, T& x, T& y, T& z); \
1302 template void centroid<T>(const quadix<T, 2>& quadix, T& x, T& y); \
1303 template void centroid<T>(const rectangle<T>& rectangle, T& x, T& y); \
1304 template void centroid<T>(const box<T, 3>& box, T& x, T& y, T& z); \
1305 template void centroid<T>(const polygon<T, 2>& polygon, T& x, T& y); \
1306 template point2d<T> centroid<T>(const point2d<T>& point1, \
1307 const point2d<T>& point2, \
1308 const point2d<T>& point3); \
1309 template point2d<T> centroid<T>( \
1310 const point2d<T>& point1, const point2d<T>& point2, \
1311 const point2d<T>& point3, const point2d<T>& point4); \
1312 template point2d<T> centroid<T>(const triangle<T, 2>& triangle); \
1313 template point3d<T> centroid<T>(const triangle<T, 3>& triangle); \
1314 template point2d<T> centroid<T>(const quadix<T, 2>& quadix); \
1315 template point2d<T> centroid<T>(const rectangle<T>& rectangle); \
1316 template point3d<T> centroid<T>(const box<T, 3>& box); \
1317 template point2d<T> centroid<T>(const polygon<T, 2>& polygon); \
1318 template bool point_in_convex_polygon<T>(const T& px, const T& py, \
1319 const polygon<T, 2>& polygon); \
1320 template bool point_in_convex_polygon<T>(const point2d<T>& point, \
1321 const polygon<T, 2>& polygon); \
1322 template bool point_on_polygon_edge<T>(const T& px, const T& py, \
1323 const polygon<T, 2>& polygon); \
1324 template bool point_on_polygon_edge<T>(const point2d<T>& point, \
1325 const polygon<T, 2>& polygon); \
1326 template bool point_in_polygon<T>(const T& px, const T& py, \
1327 const polygon<T, 2>& polygon); \
1328 template bool point_in_polygon<T>(const point2d<T>& point, \
1329 const polygon<T, 2>& polygon); \
1330 template bool point_in_polygon_winding_number<T>( \
1331 const T& px, const T& py, const polygon<T, 2>& polygon); \
1332 template bool point_in_polygon_winding_number<T>( \
1333 const point2d<T>& point, const polygon<T, 2>& polygon); \
1334 template bool convex_quadix<T>(const quadix<T, 2>& quadix); \
1335 template bool convex_quadix<T>(const quadix<T, 3>& quadix); \
1336 template bool is_convex_polygon<T>(const polygon<T, 2>& polygon); \
1337 template polygon<T, 2> remove_consecutive_collinear_points<T>( \
1338 const polygon<T, 2>& polygon); \
1340 remove_consecutive_collinear_points<T, InputIterator2d, OutputIterator2d>( \
1341 const InputIterator2d begin, const InputIterator2d end, \
1342 OutputIterator2d out); \
1343 template bool convex_vertex<T>(const std::size_t& index, \
1344 const polygon<T, 2>& polygon, \
1345 const int& polygon_orientation); \
1346 template bool collinear_vertex<T>(const std::size_t& index, \
1347 const polygon<T, 2>& polygon); \
1348 template bool vertex_is_ear<T>(const std::size_t& index, \
1349 const polygon<T, 2>& polygon); \
1350 template triangle<T, 2> vertex_triangle<T>(const std::size_t& index, \
1351 const polygon<T, 2> polygon); \
1352 template int polygon_orientation<T>(const polygon<T, 2>& polygon); \
1353 template bool is_equilateral_triangle<T>(const triangle<T, 2>& triangle); \
1354 template bool is_equilateral_triangle<T>(const triangle<T, 3>& triangle); \
1355 template bool is_isosceles_triangle<T>(const triangle<T, 2>& triangle); \
1356 template bool is_isosceles_triangle<T>(const triangle<T, 3>& triangle); \
1357 template bool is_right_triangle<T>(const wykobi::triangle<T, 2>& triangle); \
1358 template bool is_right_triangle<T>(const wykobi::triangle<T, 3>& triangle); \
1359 template bool are_perspective_triangles<T>(const triangle<T, 2>& triangle1, \
1360 const triangle<T, 2>& triangle2); \
1361 template bool are_perspective_triangles<T>(const triangle<T, 3>& triangle1, \
1362 const triangle<T, 3>& triangle2); \
1363 template line<T, 2> perspectrix<T>(const triangle<T, 2>& triangle1, \
1364 const triangle<T, 2>& triangle2); \
1365 template line<T, 3> perspectrix<T>(const triangle<T, 3>& triangle1, \
1366 const triangle<T, 3>& triangle2); \
1367 template void mirror<T>(const T& px, const T& py, const T& x1, const T& y1, \
1368 const T& x2, const T& y2, T& nx, T& ny); \
1369 template void mirror<T>(const T& px, const T& py, const T& pz, const T& x1, \
1370 const T& y1, const T& z1, const T& x2, const T& y2, \
1371 const T& z2, T& nx, T& ny, T& nz); \
1372 template point2d<T> mirror<T>(const point2d<T>& point, \
1373 const line<T, 2>& mirror_axis); \
1374 template segment<T, 2> mirror<T>(const segment<T, 2>& segment, \
1375 const line<T, 2>& mirror_axis); \
1376 template line<T, 2> mirror<T>(const line<T, 2>& line, \
1377 const wykobi::line<T, 2>& mirror_axis); \
1378 template rectangle<T> mirror<T>(const rectangle<T>& rectangle, \
1379 const line<T, 2>& mirror_axis); \
1380 template triangle<T, 2> mirror<T>(const triangle<T, 2>& triangle, \
1381 const line<T, 2>& mirror_axis); \
1382 template quadix<T, 2> mirror<T>(const quadix<T, 2>& quadix, \
1383 const line<T, 2>& mirror_axis); \
1384 template circle<T> mirror<T>(const circle<T>& circle, \
1385 const line<T, 2>& mirror_axis); \
1386 template polygon<T, 2> mirror<T>(const polygon<T, 2>& polygon, \
1387 const line<T, 2>& mirror_axis); \
1388 template point3d<T> mirror<T>(const point3d<T>& point, \
1389 const line<T, 3>& mirror_line); \
1390 template segment<T, 3> mirror<T>(const segment<T, 3>& segment, \
1391 const line<T, 3>& mirror_axis); \
1392 template line<T, 3> mirror<T>(const line<T, 3>& line, \
1393 const wykobi::line<T, 3>& mirror_axis); \
1394 template box<T, 3> mirror<T>(const box<T, 3>& box, \
1395 const line<T, 3>& mirror_axis); \
1396 template triangle<T, 3> mirror<T>(const triangle<T, 3>& triangle, \
1397 const line<T, 3>& mirror_axis); \
1398 template quadix<T, 3> mirror<T>(const quadix<T, 3>& quadix, \
1399 const line<T, 3>& mirror_axis); \
1400 template sphere<T> mirror<T>(const sphere<T>& sphere, \
1401 const line<T, 3>& mirror_axis); \
1402 template polygon<T, 3> mirror<T>(const polygon<T, 3>& polygon, \
1403 const line<T, 3>& mirror_axis); \
1404 template point3d<T> mirror<T>(const point3d<T>& point, \
1405 const plane<T, 3>& plane); \
1406 template segment<T, 3> mirror<T>(const segment<T, 3>& segment, \
1407 const plane<T, 3>& mirror_plane); \
1408 template line<T, 3> mirror<T>(const line<T, 3>& line, \
1409 const plane<T, 3>& mirror_plane); \
1410 template box<T, 3> mirror<T>(const box<T, 3>& box, \
1411 const plane<T, 3>& mirror_plane); \
1412 template triangle<T, 3> mirror<T>(const triangle<T, 3>& triangle, \
1413 const plane<T, 3>& mirror_plane); \
1414 template quadix<T, 3> mirror<T>(const quadix<T, 3>& quadix, \
1415 const plane<T, 3>& mirror_plane); \
1416 template sphere<T> mirror<T>(const sphere<T>& sphere, \
1417 const plane<T, 3>& mirror_plane); \
1418 template polygon<T, 3> mirror<T>(const polygon<T, 3>& polygon, \
1419 const plane<T, 3>& mirror_plane); \
1420 template void nonsymmetric_mirror<T>(const T& px, const T& py, const T& x1, \
1421 const T& y1, const T& x2, const T& y2, \
1422 const T& ratio, T& nx, T& ny); \
1423 template point2d<T> nonsymmetric_mirror<T>( \
1424 const point2d<T>& point, const T& ratio, const line<T, 2>& line); \
1425 template segment<T, 2> nonsymmetric_mirror<T>( \
1426 const segment<T, 2>& segment, const T& ratio, const line<T, 2>& line); \
1427 template rectangle<T> nonsymmetric_mirror<T>( \
1428 const rectangle<T>& rectangle, const T& ratio, const line<T, 2>& line); \
1429 template triangle<T, 2> nonsymmetric_mirror<T>( \
1430 const triangle<T, 2>& triangle, const T& ratio, const line<T, 2>& line); \
1431 template quadix<T, 2> nonsymmetric_mirror<T>( \
1432 const quadix<T, 2>& quadix, const T& ratio, const line<T, 2>& line); \
1433 template circle<T> nonsymmetric_mirror<T>( \
1434 const circle<T>& circle, const T& ratio, const line<T, 2>& line); \
1435 template polygon<T, 2> nonsymmetric_mirror<T>( \
1436 const polygon<T, 2>& polygon, const T& ratio, const line<T, 2>& line); \
1437 template point3d<T> nonsymmetric_mirror<T>( \
1438 const point3d<T>& point, const T& ratio, const plane<T, 3>& plane); \
1439 template segment<T, 3> nonsymmetric_mirror<T>( \
1440 const segment<T, 3>& segment, const T& ratio, const plane<T, 3>& plane); \
1441 template box<T, 3> nonsymmetric_mirror<T>( \
1442 const box<T, 3>& box, const T& ratio, const plane<T, 3>& plane); \
1443 template triangle<T, 3> nonsymmetric_mirror<T>( \
1444 const triangle<T, 3>& triangle, const T& ratio, \
1445 const plane<T, 3>& plane); \
1446 template quadix<T, 3> nonsymmetric_mirror<T>( \
1447 const quadix<T, 3>& quadix, const T& ratio, const plane<T, 3>& plane); \
1448 template sphere<T> nonsymmetric_mirror<T>( \
1449 const sphere<T>& sphere, const T& ratio, const plane<T, 3>& plane); \
1450 template polygon<T, 3> nonsymmetric_mirror<T>( \
1451 const polygon<T, 3>& polygon, const T& ratio, const plane<T, 3>& plane); \
1452 template point2d<T> invert_point<T>(const point2d<T>& point, \
1453 const circle<T>& circle); \
1454 template point3d<T> invert_point<T>(const point3d<T>& point, \
1455 const sphere<T>& sphere); \
1456 template point2d<T> antipodal_point<T>(const point2d<T>& point, \
1457 const circle<T>& circle); \
1458 template point3d<T> antipodal_point<T>(const point3d<T>& point, \
1459 const sphere<T>& sphere); \
1460 template T distance<T>(const T& x1, const T& y1, const T& x2, const T& y2); \
1461 template T distance<T>(const T& x1, const T& y1, const T& z1, const T& x2, \
1462 const T& y2, const T& z2); \
1463 template T distance<T>(const point2d<T>& point1, const point2d<T>& point2); \
1464 template T distance<T>(const point3d<T>& point1, const point3d<T>& point2); \
1465 template T distance<T>(const curve_point<T, 2>& point1, \
1466 const curve_point<T, 2>& point2); \
1467 template T distance<T>(const curve_point<T, 3>& point1, \
1468 const curve_point<T, 3>& point2); \
1469 template T distance<T>(const point2d<T>& point, \
1470 const segment<T, 2>& segment); \
1471 template T distance<T>(const point3d<T>& point, \
1472 const segment<T, 3>& segment); \
1473 template T distance<T>(const point2d<T>& point, \
1474 const rectangle<T>& rectangle); \
1475 template T distance<T>(const point2d<T>& point, \
1476 const triangle<T, 2>& triangle); \
1477 template T distance<T>(const point2d<T>& point, const quadix<T, 2>& quadix); \
1478 template T distance<T>(const point2d<T>& point, const ray<T, 2>& ray); \
1479 template T distance<T>(const point3d<T>& point, const ray<T, 3>& ray); \
1480 template T distance<T>(const point3d<T>& point, const plane<T, 3>& plane); \
1481 template T distance<T>(const line<T, 2>& line1, const line<T, 2>& line2); \
1482 template T distance<T>(const line<T, 3>& line1, const line<T, 3>& line2); \
1483 template T distance<T>(const segment<T, 2>& segment1, \
1484 const segment<T, 2>& segment2); \
1485 template T distance<T>(const segment<T, 3>& segment1, \
1486 const segment<T, 3>& segment2); \
1487 template T distance<T>(const segment<T, 2>& segment); \
1488 template T distance<T>(const segment<T, 3>& segment); \
1489 template T distance<T>(const segment<T, 2>& segment, \
1490 const triangle<T, 2>& triangle); \
1491 template T distance<T>(const segment<T, 3>& segment, \
1492 const triangle<T, 3>& triangle); \
1493 template T distance<T>(const segment<T, 2>& segment, \
1494 const rectangle<T>& rectangle); \
1495 template T distance<T>(const segment<T, 2>& segment, \
1496 const circle<T>& circle); \
1497 template T distance<T>(const triangle<T, 2>& triangle1, \
1498 const triangle<T, 2>& triangle2); \
1499 template T distance<T>(const triangle<T, 2>& triangle, \
1500 const rectangle<T>& rectangle); \
1501 template T distance<T>(const rectangle<T>& rectangle1, \
1502 const rectangle<T>& rectangle2); \
1503 template T distance<T>(const triangle<T, 2>& triangle, \
1504 const circle<T>& circle); \
1505 template T distance<T>(const rectangle<T>& rectangle, \
1506 const circle<T>& circle); \
1507 template T distance<T>(const point2d<T>& point, const circle<T>& circle); \
1508 template T distance<T>(const circle<T>& circle1, const circle<T>& circle2); \
1509 template T distance<T>(const sphere<T>& sphere1, const sphere<T>& sphere2); \
1510 template T lay_distance<T>(const T& x1, const T& y1, const T& x2, \
1512 template T lay_distance<T>(const T& x1, const T& y1, const T& z1, \
1513 const T& x2, const T& y2, const T& z2); \
1514 template T lay_distance<T>(const point2d<T>& point1, \
1515 const point2d<T>& point2); \
1516 template T lay_distance<T>(const point3d<T>& point1, \
1517 const point3d<T>& point2); \
1518 template T lay_distance<T>(const point2d<T>& point, \
1519 const triangle<T, 2>& triangle); \
1520 template T lay_distance<T>(const point2d<T>& point, \
1521 const quadix<T, 2>& triangle); \
1522 template T lay_distance<T>(const point2d<T>& point, const ray<T, 2>& ray); \
1523 template T lay_distance<T>(const point3d<T>& point, const ray<T, 3>& ray); \
1524 template T lay_distance<T>(const point3d<T>& point, \
1525 const plane<T, 3>& plane); \
1526 template T lay_distance<T>(const segment<T, 2>& segment1, \
1527 const segment<T, 2>& segment2); \
1528 template T lay_distance<T>(const segment<T, 3>& segment1, \
1529 const segment<T, 3>& segment2); \
1530 template T lay_distance<T>(const line<T, 3>& line1, \
1531 const line<T, 3>& line2); \
1532 template T lay_distance<T>(const segment<T, 2>& segment); \
1533 template T lay_distance<T>(const segment<T, 3>& segment); \
1534 template T lay_distance<T>(const segment<T, 2>& segment, \
1535 const triangle<T, 2>& triangle); \
1536 template T lay_distance<T>(const segment<T, 3>& segment, \
1537 const triangle<T, 3>& triangle); \
1538 template T manhattan_distance<T>(const T& x1, const T& y1, const T& x2, \
1540 template T manhattan_distance<T>(const T& x1, const T& y1, const T& z1, \
1541 const T& x2, const T& y2, const T& z2); \
1542 template T manhattan_distance<T>(const point2d<T>& point1, \
1543 const point2d<T>& point2); \
1544 template T manhattan_distance<T>(const point3d<T>& point1, \
1545 const point3d<T>& point2); \
1546 template T manhattan_distance<T>(const point2d<T>& point, \
1547 const ray<T, 2>& ray); \
1548 template T manhattan_distance<T>(const point3d<T>& point, \
1549 const ray<T, 3>& ray); \
1550 template T manhattan_distance<T>(const segment<T, 2>& segment); \
1551 template T manhattan_distance<T>(const segment<T, 3>& segment); \
1552 template T manhattan_distance<T>(const circle<T>& circle1, \
1553 const circle<T>& circle2); \
1554 template T chebyshev_distance<T>(const T& x1, const T& y1, const T& x2, \
1556 template T chebyshev_distance<T>(const T& x1, const T& y1, const T& z1, \
1557 const T& x2, const T& y2, const T& z2); \
1558 template T chebyshev_distance<T>(const point2d<T>& point1, \
1559 const point2d<T>& point2); \
1560 template T chebyshev_distance<T>(const point3d<T>& point1, \
1561 const point3d<T>& point2); \
1562 template T chebyshev_distance<T>(const segment<T, 2>& segment); \
1563 template T chebyshev_distance<T>(const segment<T, 3>& segment); \
1564 template T chebyshev_distance<T>(const circle<T>& circle1, \
1565 const circle<T>& circle2); \
1566 template T inverse_chebyshev_distance<T>(const T& x1, const T& y1, \
1567 const T& x2, const T& y2); \
1568 template T inverse_chebyshev_distance<T>(const T& x1, const T& y1, \
1569 const T& z1, const T& x2, \
1570 const T& y2, const T& z2); \
1571 template T inverse_chebyshev_distance<T>(const point2d<T>& point1, \
1572 const point2d<T>& point2); \
1573 template T inverse_chebyshev_distance<T>(const point3d<T>& point1, \
1574 const point3d<T>& point2); \
1575 template T inverse_chebyshev_distance<T>(const segment<T, 2>& segment); \
1576 template T inverse_chebyshev_distance<T>(const segment<T, 3>& segment); \
1577 template T inverse_chebyshev_distance<T>(const circle<T>& circle1, \
1578 const circle<T>& circle2); \
1579 template point2d<T> minkowski_sum<T>(const point2d<T>& point1, \
1580 const point2d<T>& point2); \
1581 template polygon<T, 2> minkowski_sum<T>(const rectangle<T>& rectangle1, \
1582 const rectangle<T>& rectangle2); \
1583 template polygon<T, 2> minkowski_sum<T>(const triangle<T, 2>& triangle1, \
1584 const triangle<T, 2>& triangle2); \
1585 template polygon<T, 2> minkowski_sum<T>(const quadix<T, 2>& quadix1, \
1586 const quadix<T, 2>& quadix2); \
1587 template polygon<T, 2> minkowski_sum<T>(const circle<T>& triangle, \
1588 const circle<T>& circle); \
1589 template polygon<T, 2> minkowski_sum<T>(const triangle<T, 2>& triangle, \
1590 const rectangle<T>& rectangle); \
1591 template polygon<T, 2> minkowski_sum<T>(const triangle<T, 2>& triangle, \
1592 const quadix<T, 2>& quadix); \
1593 template polygon<T, 2> minkowski_sum<T>(const triangle<T, 2>& triangle, \
1594 const circle<T>& circle); \
1595 template polygon<T, 2> minkowski_sum<T>(const quadix<T, 2>& quadix, \
1596 const circle<T>& circle); \
1597 template polygon<T, 2> minkowski_sum<T>(const quadix<T, 2>& quadix, \
1598 const rectangle<T>& rectangle); \
1599 template polygon<T, 2> minkowski_sum<T>(const rectangle<T>& rectangle, \
1600 const circle<T>& circle); \
1601 template polygon<T, 2> minkowski_sum<T>(const polygon<T, 2>& polygon1, \
1602 const polygon<T, 2>& polygon2); \
1603 template point2d<T> minkowski_difference<T>(const point2d<T>& point1, \
1604 const point2d<T>& point2); \
1605 template polygon<T, 2> minkowski_difference<T>( \
1606 const rectangle<T>& rectangle1, const rectangle<T>& rectangle2); \
1607 template polygon<T, 2> minkowski_difference<T>( \
1608 const triangle<T, 2>& triangle1, const triangle<T, 2>& triangle2); \
1609 template polygon<T, 2> minkowski_difference<T>(const quadix<T, 2>& quadix1, \
1610 const quadix<T, 2>& quadix2); \
1611 template polygon<T, 2> minkowski_difference<T>(const circle<T>& triangle, \
1612 const circle<T>& circle); \
1613 template polygon<T, 2> minkowski_difference<T>( \
1614 const triangle<T, 2>& triangle, const rectangle<T>& rectangle); \
1615 template polygon<T, 2> minkowski_difference<T>( \
1616 const triangle<T, 2>& triangle, const quadix<T, 2>& quadix); \
1617 template polygon<T, 2> minkowski_difference<T>( \
1618 const triangle<T, 2>& triangle, const circle<T>& circle); \
1619 template polygon<T, 2> minkowski_difference<T>(const quadix<T, 2>& quadix, \
1620 const circle<T>& circle); \
1621 template polygon<T, 2> minkowski_difference<T>( \
1622 const quadix<T, 2>& quadix, const rectangle<T>& rectangle); \
1623 template polygon<T, 2> minkowski_difference<T>( \
1624 const rectangle<T>& rectangle, const circle<T>& circle); \
1625 template polygon<T, 2> minkowski_difference<T>( \
1626 const polygon<T, 2>& polygon1, const polygon<T, 2>& polygon2); \
1627 template T distance_segment_to_segment<T>( \
1628 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
1629 const T& y3, const T& x4, const T& y4); \
1630 template T distance_segment_to_segment<T>( \
1631 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1632 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
1633 const T& y4, const T& z4); \
1634 template T lay_distance_segment_to_segment<T>( \
1635 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
1636 const T& y3, const T& x4, const T& y4); \
1637 template T lay_distance_segment_to_segment<T>( \
1638 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1639 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
1640 const T& y4, const T& z4); \
1641 template T distance_line_to_line<T>(const T& x1, const T& y1, const T& x2, \
1642 const T& y2, const T& x3, const T& y3, \
1643 const T& x4, const T& y4); \
1644 template T distance_line_to_line<T>(const T& x1, const T& y1, const T& z1, \
1645 const T& x2, const T& y2, const T& z2, \
1646 const T& x3, const T& y3, const T& z3, \
1647 const T& x4, const T& y4, const T& z4); \
1648 template T lay_distance_line_to_line<T>( \
1649 const T& x1, const T& y1, const T& x2, const T& y2, const T& x3, \
1650 const T& y3, const T& x4, const T& y4); \
1651 template T lay_distance_line_to_line<T>( \
1652 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
1653 const T& z2, const T& x3, const T& y3, const T& z3, const T& x4, \
1654 const T& y4, const T& z4); \
1655 template T lay_distance_from_point_to_circle_center<T>( \
1656 const point2d<T>& point, const circle<T>& circle); \
1657 template T lay_distance_from_point_to_sphere_center<T>( \
1658 const point3d<T>& point, const sphere<T>& sphere); \
1659 template T distance_from_point_to_circle_center<T>(const point2d<T>& point, \
1660 const circle<T>& circle); \
1661 template T distance_from_point_to_sphere_center<T>(const point3d<T>& point, \
1662 const sphere<T>& sphere); \
1663 template T span_length(const rectangle<T>& rect); \
1664 template T span_length(const box<T, 3>& box); \
1665 template void project_point_t<T>(const T& srcx, const T& srcy, \
1666 const T& destx, const T& desty, const T& t, \
1668 template void project_point_t<T>( \
1669 const T& srcx, const T& srcy, const T& srcz, const T& destx, \
1670 const T& desty, const T& destz, const T& t, T& nx, T& ny, T& nz); \
1671 template void project_point<T>(const T& srcx, const T& srcy, const T& destx, \
1672 const T& desty, const T& dist, T& nx, T& ny); \
1673 template void project_point<T>( \
1674 const T& srcx, const T& srcy, const T& srcz, const T& destx, \
1675 const T& desty, const T& destz, const T& dist, T& nx, T& ny, T& nz); \
1676 template void project_point<T>(const T& px, const T& py, const T& angle, \
1677 const T& distance, T& nx, T& ny); \
1678 template void project_point0<T>(const T& px, const T& py, const T& distance, \
1680 template void project_point45<T>(const T& px, const T& py, \
1681 const T& distance, T& nx, T& ny); \
1682 template void project_point90<T>(const T& px, const T& py, \
1683 const T& distance, T& nx, T& ny); \
1684 template void project_point135<T>(const T& px, const T& py, \
1685 const T& distance, T& nx, T& ny); \
1686 template void project_point180<T>(const T& px, const T& py, \
1687 const T& distance, T& nx, T& ny); \
1688 template void project_point225<T>(const T& px, const T& py, \
1689 const T& distance, T& nx, T& ny); \
1690 template void project_point270<T>(const T& px, const T& py, \
1691 const T& distance, T& nx, T& ny); \
1692 template void project_point315<T>(const T& px, const T& py, \
1693 const T& distance, T& nx, T& ny); \
1694 template point2d<T> project_point_t<T>(const point2d<T>& source_point, \
1695 const point2d<T>& destination_point, \
1697 template point3d<T> project_point_t<T>(const point3d<T>& source_point, \
1698 const point3d<T>& destination_point, \
1700 template point2d<T> project_point<T>(const point2d<T>& source_point, \
1701 const point2d<T>& destination_point, \
1702 const T& distance); \
1703 template point3d<T> project_point<T>(const point3d<T>& source_point, \
1704 const point3d<T>& destination_point, \
1705 const T& distance); \
1706 template point2d<T> project_point<T>(const point2d<T>& point, \
1707 const T& angle, const T& distance); \
1708 template point2d<T> project_point0<T>(const point2d<T>& point, \
1709 const T& distance); \
1710 template point2d<T> project_point45<T>(const point2d<T>& point, \
1711 const T& distance); \
1712 template point2d<T> project_point90<T>(const point2d<T>& point, \
1713 const T& distance); \
1714 template point2d<T> project_point135<T>(const point2d<T>& point, \
1715 const T& distance); \
1716 template point2d<T> project_point180<T>(const point2d<T>& point, \
1717 const T& distance); \
1718 template point2d<T> project_point225<T>(const point2d<T>& point, \
1719 const T& distance); \
1720 template point2d<T> project_point270<T>(const point2d<T>& point, \
1721 const T& distance); \
1722 template point2d<T> project_point315<T>(const point2d<T>& point, \
1723 const T& distance); \
1724 template point2d<T> project_object<T>(const point2d<T>& point, \
1725 const T& angle, const T& distance); \
1726 template segment<T, 2> project_object<T>(const segment<T, 2>& segment, \
1727 const T& angle, const T& distance); \
1728 template triangle<T, 2> project_object<T>( \
1729 const triangle<T, 2>& triangle, const T& angle, const T& distance); \
1730 template quadix<T, 2> project_object<T>(const quadix<T, 2>& quadix, \
1731 const T& angle, const T& distance); \
1732 template circle<T> project_object<T>(const circle<T>& circle, \
1733 const T& angle, const T& distance); \
1734 template polygon<T, 2> project_object<T>(const polygon<T, 2>& polygon, \
1735 const T& angle, const T& distance); \
1736 template segment<T, 2> project_onto_axis<T>(const point2d<T>& point, \
1737 const line<T, 2>& axis); \
1738 template segment<T, 2> project_onto_axis<T>(const triangle<T, 2>& triangle, \
1739 const line<T, 2>& axis); \
1740 template segment<T, 2> project_onto_axis<T>(const rectangle<T>& rectangle, \
1741 const line<T, 2>& axis); \
1742 template segment<T, 2> project_onto_axis<T>(const quadix<T, 2>& quadix, \
1743 const line<T, 2>& axis); \
1744 template segment<T, 2> project_onto_axis<T>(const circle<T>& circle, \
1745 const line<T, 2>& axis); \
1746 template segment<T, 2> project_onto_axis<T>(const polygon<T, 2>& polygon, \
1747 const line<T, 2>& axis); \
1748 template segment<T, 3> project_onto_axis<T>(const point3d<T>& point, \
1749 const line<T, 3>& axis); \
1750 template segment<T, 3> project_onto_axis<T>(const triangle<T, 3>& triangle, \
1751 const line<T, 3>& axis); \
1752 template segment<T, 3> project_onto_axis<T>(const box<T, 3>& box, \
1753 const line<T, 3>& axis); \
1754 template segment<T, 3> project_onto_axis<T>(const quadix<T, 3>& quadix, \
1755 const line<T, 3>& axis); \
1756 template segment<T, 3> project_onto_axis<T>(const sphere<T>& sphere, \
1757 const line<T, 3>& axis); \
1758 template segment<T, 3> project_onto_axis<T>(const polygon<T, 3>& polygon, \
1759 const line<T, 3>& axis); \
1760 template void calculate_bezier_coefficients<T>( \
1761 const quadratic_bezier<T, 2>& bezier, T& ax, T& bx, T& ay, T& by); \
1762 template void calculate_bezier_coefficients<T>( \
1763 const quadratic_bezier<T, 3>& bezier, T& ax, T& bx, T& ay, T& by, T& az, \
1765 template void calculate_bezier_coefficients<T>( \
1766 const cubic_bezier<T, 2>& bezier, T& ax, T& bx, T& cx, T& ay, T& by, \
1768 template void calculate_bezier_coefficients<T>( \
1769 const cubic_bezier<T, 3>& bezier, T& ax, T& bx, T& cx, T& ay, T& by, \
1770 T& cy, T& az, T& bz, T& cz); \
1771 template void calculate_bezier_coefficients<T>( \
1772 const quadratic_bezier<T, 2>& bezier, \
1773 bezier_coefficients<T, 2, eQuadraticBezier>& coeffs); \
1774 template void calculate_bezier_coefficients<T>( \
1775 const quadratic_bezier<T, 3>& bezier, \
1776 bezier_coefficients<T, 3, eQuadraticBezier>& coeffs); \
1777 template void calculate_bezier_coefficients<T>( \
1778 const cubic_bezier<T, 2>& bezier, \
1779 bezier_coefficients<T, 2, eCubicBezier>& coeffs); \
1780 template void calculate_bezier_coefficients<T>( \
1781 const cubic_bezier<T, 3>& bezier, \
1782 bezier_coefficients<T, 3, eCubicBezier>& coeffs); \
1783 template point2d<T> create_point_on_bezier<T>( \
1784 const point2d<T>& start_point, const T& ax, const T& bx, const T& ay, \
1785 const T& by, const T& t); \
1786 template point3d<T> create_point_on_bezier<T>( \
1787 const point3d<T>& start_point, const T& ax, const T& bx, const T& ay, \
1788 const T& by, const T& az, const T& bz, const T& t); \
1789 template point2d<T> create_point_on_bezier<T>( \
1790 const point2d<T>& start_point, const T& ax, const T& bx, const T& cx, \
1791 const T& ay, const T& by, const T& cy, const T& t); \
1792 template point3d<T> create_point_on_bezier<T>( \
1793 const point3d<T>& start_point, const T& ax, const T& bx, const T& cx, \
1794 const T& ay, const T& by, const T& cy, const T& az, const T& bz, \
1795 const T& cz, const T& t); \
1796 template point2d<T> create_point_on_bezier<T>( \
1797 const point2d<T>& start_point, \
1798 const bezier_coefficients<T, 2, eQuadraticBezier>& coeffs, const T& t); \
1799 template point3d<T> create_point_on_bezier<T>( \
1800 const point3d<T>& start_point, \
1801 const bezier_coefficients<T, 3, eQuadraticBezier>& coeffs, const T& t); \
1802 template point2d<T> create_point_on_bezier<T>( \
1803 const point2d<T>& start_point, \
1804 const bezier_coefficients<T, 2, eCubicBezier>& coeffs, const T& t); \
1805 template point3d<T> create_point_on_bezier<T>( \
1806 const point3d<T>& start_point, \
1807 const bezier_coefficients<T, 3, eCubicBezier>& coeffs, const T& t); \
1808 template void generate_bezier<T, OutputIterator2d>( \
1809 const quadratic_bezier<T, 2>& bezier, OutputIterator2d out, \
1810 const std::size_t& point_count); \
1811 template void generate_bezier<T, OutputIterator3d>( \
1812 const quadratic_bezier<T, 3>& bezier, OutputIterator3d out, \
1813 const std::size_t& point_count); \
1814 template void generate_bezier<T, OutputIterator2d>( \
1815 const cubic_bezier<T, 2>& bezier, OutputIterator2d out, \
1816 const std::size_t& point_count); \
1817 template void generate_bezier<T, OutputIterator3d>( \
1818 const cubic_bezier<T, 3>& bezier, OutputIterator3d out, \
1819 const std::size_t& point_count); \
1820 template T bezier_curve_length<T>(const quadratic_bezier<T, 2>& bezier, \
1821 const std::size_t& point_count); \
1822 template T bezier_curve_length<T>(const quadratic_bezier<T, 3>& bezier, \
1823 const std::size_t& point_count); \
1824 template T bezier_curve_length<T>(const cubic_bezier<T, 2>& bezier, \
1825 const std::size_t& point_count); \
1826 template T bezier_curve_length<T>(const cubic_bezier<T, 3>& bezier, \
1827 const std::size_t& point_count); \
1828 template triangle<T, 2> bezier_convex_hull<T>( \
1829 const quadratic_bezier<T, 2>& bezier); \
1830 template quadix<T, 2> bezier_convex_hull<T>( \
1831 const cubic_bezier<T, 2>& bezier); \
1832 template segment<T, 2> center_at_location<T>(const segment<T, 2>& segment, \
1833 const T& x, const T& y); \
1834 template segment<T, 3> center_at_location<T>( \
1835 const segment<T, 3>& segment, const T& x, const T& y, const T& z); \
1836 template triangle<T, 2> center_at_location<T>( \
1837 const triangle<T, 2>& triangle, const T& x, const T& y); \
1838 template rectangle<T> center_at_location<T>(const rectangle<T>& rectangle, \
1839 const T& x, const T& y); \
1840 template box<T, 3> center_at_location<T>(const box<T, 3>& box, const T& x, \
1841 const T& y, const T& z); \
1842 template quadix<T, 2> center_at_location<T>(const quadix<T, 2>& quadix, \
1843 const T& x, const T& y); \
1844 template circle<T> center_at_location<T>(const circle<T>& circle, \
1845 const T& x, const T& y); \
1846 template polygon<T, 2> center_at_location<T>(const polygon<T, 2>& polygon, \
1847 const T& x, const T& y); \
1848 template segment<T, 2> center_at_location<T>( \
1849 const segment<T, 2>& segment, const point2d<T>& center_point); \
1850 template segment<T, 3> center_at_location<T>( \
1851 const segment<T, 3>& segment, const point3d<T>& center_point); \
1852 template triangle<T, 2> center_at_location<T>( \
1853 const triangle<T, 2>& triangle, const point2d<T>& center_point); \
1854 template rectangle<T> center_at_location<T>(const rectangle<T>& rectangle, \
1855 const point2d<T>& center_point); \
1856 template box<T, 3> center_at_location<T>(const box<T, 3>& box, \
1857 const point3d<T>& center_point); \
1858 template quadix<T, 2> center_at_location<T>(const quadix<T, 2>& quadix, \
1859 const point2d<T>& center_point); \
1860 template circle<T> center_at_location<T>(const circle<T>& circle, \
1861 const point2d<T>& center_point); \
1862 template polygon<T, 2> center_at_location<T>( \
1863 const polygon<T, 2>& polygon, const point2d<T>& center_point); \
1864 template void shorten_segment<T>(T & x1, T & y1, T & x2, T & y2, \
1866 template void shorten_segment<T>(T & x1, T & y1, T & z1, T & x2, T & y2, \
1867 T & z2, const T& amount); \
1868 template segment<T, 2> shorten_segment<T>(const segment<T, 2>& segment, \
1870 template segment<T, 3> shorten_segment<T>(const segment<T, 3>& segment, \
1872 template void lengthen_segment<T>(T & x1, T & y1, T & x2, T & y2, \
1874 template void lengthen_segment<T>(T & x1, T & y1, T & z1, T & x2, T & y2, \
1875 T & z2, const T& amount); \
1876 template segment<T, 2> lengthen_segment<T>(const segment<T, 2>& segment, \
1878 template segment<T, 3> lengthen_segment<T>(const segment<T, 3>& segment, \
1880 template int out_code<T>(const point2d<T>& point, \
1881 const rectangle<T>& rectangle); \
1882 template bool clip<T>(const T& x1, const T& y1, const T& x2, const T& y2, \
1883 const T& x3, const T& y3, const T& x4, const T& y4, \
1884 T& cx1, T& cy1, T& cx2, T& cy2); \
1885 template bool clip<T>(const T& x1, const T& y1, const T& z1, const T& x2, \
1886 const T& y2, const T& z2, const T& x3, const T& y3, \
1887 const T& z3, const T& x4, const T& y4, const T& z4, \
1888 T& cx1, T& cy1, T& cz1, T& cx2, T& cy2, T& cz2); \
1889 template bool clip<T>(const segment<T, 2>& src_segment, \
1890 const rectangle<T>& rectangle, \
1891 segment<T, 2>& csegment); \
1892 template bool clip<T>(const segment<T, 2>& src_segment, \
1893 const triangle<T, 2>& triangle, \
1894 segment<T, 2>& csegment); \
1895 template bool clip<T>(const segment<T, 2>& src_segment, \
1896 const quadix<T, 2>& quadix, segment<T, 2>& csegment); \
1897 template bool clip<T>(const segment<T, 2>& src_segment, \
1898 const circle<T>& circle, segment<T, 2>& csegment); \
1899 template bool clip<T>(const rectangle<T>& rectangle1, \
1900 const rectangle<T>& rectangle2, \
1901 rectangle<T>& crectangle); \
1902 template bool clip<T>(const box<T, 3>& box1, const box<T, 3>& box2, \
1904 template T area<T>(const point2d<T>& point1, const point2d<T>& point2, \
1905 const point2d<T>& point3); \
1906 template T area<T>(const point3d<T>& point1, const point3d<T>& point2, \
1907 const point3d<T>& point3); \
1908 template T area<T>(const triangle<T, 2>& triangle); \
1909 template T area<T>(const triangle<T, 3>& triangle); \
1910 template T area<T>(const quadix<T, 2>& quadix); \
1911 template T area<T>(const quadix<T, 3>& quadix); \
1912 template T area<T>(const rectangle<T>& rectangle); \
1913 template T area<T>(const circle<T>& circle); \
1914 template T area<T>(const polygon<T, 2>& polygon); \
1915 template T perimeter<T>(const point2d<T>& point1, const point2d<T>& point2, \
1916 const point2d<T>& point3); \
1917 template T perimeter<T>(const point3d<T>& point1, const point3d<T>& point2, \
1918 const point3d<T>& point3); \
1919 template T perimeter<T>(const triangle<T, 2>& triangle); \
1920 template T perimeter<T>(const triangle<T, 3>& triangle); \
1921 template T perimeter<T>(const quadix<T, 2>& quadix); \
1922 template T perimeter<T>(const quadix<T, 3>& quadix); \
1923 template T perimeter<T>(const rectangle<T>& rectangle); \
1924 template T perimeter<T>(const circle<T>& circle); \
1925 template T perimeter<T>(const polygon<T, 2>& polygon); \
1926 template void rotate<T>(const T& rotation_angle, const T& x, const T& y, \
1928 template void rotate<T>(const T& rotation_angle, const T& x, const T& y, \
1929 const T& ox, const T& oy, T& nx, T& ny); \
1930 template point2d<T> rotate<T>(const T& rotation_angle, \
1931 const point2d<T>& point); \
1932 template point2d<T> rotate<T>(const T& rotation_angle, \
1933 const point2d<T>& point, \
1934 const point2d<T>& opoint); \
1935 template segment<T, 2> rotate<T>(const T& rotation_angle, \
1936 const segment<T, 2>& segment); \
1937 template segment<T, 2> rotate<T>(const T& rotation_angle, \
1938 const segment<T, 2>& segment, \
1939 const point2d<T>& opoint); \
1940 template triangle<T, 2> rotate<T>(const T& rotation_angle, \
1941 const triangle<T, 2>& triangle); \
1942 template triangle<T, 2> rotate<T>(const T& rotation_angle, \
1943 const triangle<T, 2>& triangle, \
1944 const point2d<T>& opoint); \
1945 template quadix<T, 2> rotate<T>(const T& rotation_angle, \
1946 const quadix<T, 2>& quadix); \
1947 template quadix<T, 2> rotate<T>(const T& rotation_angle, \
1948 const quadix<T, 2>& quadix, \
1949 const point2d<T>& opoint); \
1950 template polygon<T, 2> rotate<T>(const T& rotation_angle, \
1951 const polygon<T, 2>& polygon); \
1952 template polygon<T, 2> rotate<T>(const T& rotation_angle, \
1953 const polygon<T, 2>& polygon, \
1954 const point2d<T>& opoint); \
1955 template void rotate<T>(const T& rx, const T& ry, const T& rz, const T& x, \
1956 const T& y, const T& z, T& nx, T& ny, T& nz); \
1957 template void rotate<T>(const T& rx, const T& ry, const T& rz, const T& x, \
1958 const T& y, const T& z, const T& ox, const T& oy, \
1959 const T& oz, T& nx, T& ny, T& nz); \
1960 template point3d<T> rotate<T>(const T& rx, const T& ry, const T& rz, \
1961 const point3d<T>& point); \
1962 template point3d<T> rotate<T>(const T& rx, const T& ry, const T& rz, \
1963 const point3d<T>& point, \
1964 const point3d<T>& opoint); \
1965 template segment<T, 3> rotate<T>(const T& rx, const T& ry, const T& rz, \
1966 const segment<T, 3>& segment); \
1967 template segment<T, 3> rotate<T>(const T& rx, const T& ry, const T& rz, \
1968 const segment<T, 3>& segment, \
1969 const point3d<T>& opoint); \
1970 template triangle<T, 3> rotate<T>(const T& rx, const T& ry, const T& rz, \
1971 const triangle<T, 3>& triangle); \
1972 template triangle<T, 3> rotate<T>(const T& rx, const T& ry, const T& rz, \
1973 const triangle<T, 3>& triangle, \
1974 const point3d<T>& opoint); \
1975 template quadix<T, 3> rotate<T>(const T& rx, const T& ry, const T& rz, \
1976 const quadix<T, 3>& quadix); \
1977 template quadix<T, 3> rotate<T>(const T& rx, const T& ry, const T& rz, \
1978 const quadix<T, 3>& quadix, \
1979 const point3d<T>& opoint); \
1980 template polygon<T, 3> rotate<T>(const T& rx, const T& ry, const T& rz, \
1981 const polygon<T, 3>& polygon); \
1982 template polygon<T, 3> rotate<T>(const T& rx, const T& ry, const T& rz, \
1983 const polygon<T, 3>& polygon, \
1984 const point3d<T>& opoint); \
1985 template void fast_rotate<T>(const trig_luts<T>& lut, \
1986 const int rotation_angle, const T& x, \
1987 const T& y, T& nx, T& ny); \
1988 template void fast_rotate<T>( \
1989 const trig_luts<T>& lut, const int rotation_angle, const T& x, \
1990 const T& y, const T& ox, const T& oy, T& nx, T& ny); \
1991 template point2d<T> fast_rotate<T>(const trig_luts<T>& lut, \
1992 const int rotation_angle, \
1993 const point2d<T>& point); \
1994 template point2d<T> fast_rotate<T>( \
1995 const trig_luts<T>& lut, const int rotation_angle, \
1996 const point2d<T>& point, const point2d<T>& opoint); \
1997 template segment<T, 2> fast_rotate<T>(const trig_luts<T>& lut, \
1998 const int rotation_angle, \
1999 const segment<T, 2>& segment); \
2000 template segment<T, 2> fast_rotate<T>( \
2001 const trig_luts<T>& lut, const int rotation_angle, \
2002 const segment<T, 2>& segment, const point2d<T>& opoint); \
2003 template triangle<T, 2> fast_rotate<T>(const trig_luts<T>& lut, \
2004 const int rotation_angle, \
2005 const triangle<T, 2>& triangle); \
2006 template triangle<T, 2> fast_rotate<T>( \
2007 const trig_luts<T>& lut, const int rotation_angle, \
2008 const triangle<T, 2>& triangle, const point2d<T>& opoint); \
2009 template quadix<T, 2> fast_rotate<T>(const trig_luts<T>& lut, \
2010 const int rotation_angle, \
2011 const quadix<T, 2>& quadix); \
2012 template quadix<T, 2> fast_rotate<T>( \
2013 const trig_luts<T>& lut, const int rotation_angle, \
2014 const quadix<T, 2>& quadix, const point2d<T>& opoint); \
2015 template polygon<T, 2> fast_rotate<T>(const trig_luts<T>& lut, \
2016 const int rotation_angle, \
2017 const polygon<T, 2>& polygon); \
2018 template polygon<T, 2> fast_rotate<T>( \
2019 const trig_luts<T>& lut, const int rotation_angle, \
2020 const polygon<T, 2>& polygon, const point2d<T>& opoint); \
2021 template void fast_rotate<T>(const trig_luts<T>& lut, const int rx, \
2022 const int ry, const int rz, const T& x, \
2023 const T& y, const T& z, T& nx, T& ny, T& nz); \
2024 template void fast_rotate<T>(const trig_luts<T>& lut, const int rx, \
2025 const int ry, const int rz, const T& x, \
2026 const T& y, const T& z, const T& ox, \
2027 const T& oy, const T& oz, T& nx, T& ny, T& nz); \
2028 template point3d<T> fast_rotate<T>(const trig_luts<T>& lut, const int rx, \
2029 const int ry, const int rz, \
2030 const point3d<T>& point); \
2031 template point3d<T> fast_rotate<T>( \
2032 const trig_luts<T>& lut, const int rx, const int ry, const int rz, \
2033 const point3d<T>& point, const point3d<T>& opoint); \
2034 template segment<T, 3> fast_rotate<T>(const trig_luts<T>& lut, const int rx, \
2035 const int ry, const int rz, \
2036 const segment<T, 3>& segment); \
2037 template segment<T, 3> fast_rotate<T>( \
2038 const trig_luts<T>& lut, const int rx, const int ry, const int rz, \
2039 const segment<T, 3>& segment, const point3d<T>& opoint); \
2040 template triangle<T, 3> fast_rotate<T>( \
2041 const trig_luts<T>& lut, const int rx, const int ry, const int rz, \
2042 const triangle<T, 3>& triangle); \
2043 template triangle<T, 3> fast_rotate<T>( \
2044 const trig_luts<T>& lut, const int rx, const int ry, const int rz, \
2045 const triangle<T, 3>& triangle, const point3d<T>& opoint); \
2046 template quadix<T, 3> fast_rotate<T>(const trig_luts<T>& lut, const int rx, \
2047 const int ry, const int rz, \
2048 const quadix<T, 3>& quadix); \
2049 template quadix<T, 3> fast_rotate<T>( \
2050 const trig_luts<T>& lut, const int rx, const int ry, const int rz, \
2051 const quadix<T, 3>& quadix, const point3d<T>& opoint); \
2052 template polygon<T, 3> fast_rotate<T>(const trig_luts<T>& lut, const int rx, \
2053 const int ry, const int rz, \
2054 const polygon<T, 3>& polygon); \
2055 template polygon<T, 3> fast_rotate<T>( \
2056 const trig_luts<T>& lut, const int rx, const int ry, const int rz, \
2057 const polygon<T, 3>& polygon, const point3d<T>& opoint); \
2058 template point2d<T> translate<T>(const T& dx, const T& dy, \
2059 const point2d<T>& point); \
2060 template line<T, 2> translate<T>(const T& dx, const T& dy, \
2061 const line<T, 2>& line); \
2062 template segment<T, 2> translate<T>(const T& dx, const T& dy, \
2063 const segment<T, 2>& segment); \
2064 template triangle<T, 2> translate<T>(const T& dx, const T& dy, \
2065 const triangle<T, 2>& triangle); \
2066 template quadix<T, 2> translate<T>(const T& dx, const T& dy, \
2067 const quadix<T, 2>& quadix); \
2068 template rectangle<T> translate<T>(const T& dx, const T& dy, \
2069 const rectangle<T>& rectangle); \
2070 template circle<T> translate<T>(const T& dx, const T& dy, \
2071 const circle<T>& circle); \
2072 template polygon<T, 2> translate<T>(const T& dx, const T& dy, \
2073 const polygon<T, 2>& polygon); \
2074 template point2d<T> translate<T>(const T& delta, const point2d<T>& point); \
2075 template line<T, 2> translate<T>(const T& delta, const line<T, 2>& line); \
2076 template segment<T, 2> translate<T>(const T& delta, \
2077 const segment<T, 2>& segment); \
2078 template triangle<T, 2> translate<T>(const T& delta, \
2079 const triangle<T, 2>& triangle); \
2080 template quadix<T, 2> translate<T>(const T& delta, \
2081 const quadix<T, 2>& quadix); \
2082 template rectangle<T> translate<T>(const T& delta, \
2083 const rectangle<T>& rectangle); \
2084 template circle<T> translate<T>(const T& delta, const circle<T>& circle); \
2085 template polygon<T, 2> translate<T>(const T& delta, \
2086 const polygon<T, 2>& polygon); \
2087 template point2d<T> translate<T>(const vector2d<T>& v, \
2088 const point2d<T>& point); \
2089 template line<T, 2> translate<T>(const vector2d<T>& v, \
2090 const line<T, 2>& line); \
2091 template segment<T, 2> translate<T>(const vector2d<T>& v, \
2092 const segment<T, 2>& segment); \
2093 template triangle<T, 2> translate<T>(const vector2d<T>& v, \
2094 const triangle<T, 2>& triangle); \
2095 template quadix<T, 2> translate<T>(const vector2d<T>& v, \
2096 const quadix<T, 2>& quadix); \
2097 template rectangle<T> translate<T>(const vector2d<T>& v, \
2098 const rectangle<T>& rectangle); \
2099 template circle<T> translate<T>(const vector2d<T>& v, \
2100 const circle<T>& circle); \
2101 template polygon<T, 2> translate<T>(const vector2d<T>& v, \
2102 const polygon<T, 2>& polygon); \
2103 template point3d<T> translate<T>(const T& dx, const T& dy, const T& dz, \
2104 const point3d<T>& point); \
2105 template line<T, 3> translate<T>(const T& dx, const T& dy, const T& dz, \
2106 const line<T, 3>& line); \
2107 template segment<T, 3> translate<T>(const T& dx, const T& dy, const T& dz, \
2108 const segment<T, 3>& segment); \
2109 template triangle<T, 3> translate<T>(const T& dx, const T& dy, const T& dz, \
2110 const triangle<T, 3>& triangle); \
2111 template quadix<T, 3> translate<T>(const T& dx, const T& dy, const T& dz, \
2112 const quadix<T, 3>& quadix); \
2113 template box<T, 3> translate<T>(const T& dx, const T& dy, const T& dz, \
2114 const box<T, 3>& box); \
2115 template sphere<T> translate<T>(const T& dx, const T& dy, const T& dz, \
2116 const sphere<T>& sphere); \
2117 template polygon<T, 3> translate<T>(const T& dx, const T& dy, const T& dz, \
2118 const polygon<T, 3>& polygon); \
2119 template point3d<T> translate<T>(const T& delta, const point3d<T>& point); \
2120 template line<T, 3> translate<T>(const T& delta, const line<T, 3>& line); \
2121 template segment<T, 3> translate<T>(const T& delta, \
2122 const segment<T, 3>& segment); \
2123 template triangle<T, 3> translate<T>(const T& delta, \
2124 const triangle<T, 3>& triangle); \
2125 template quadix<T, 3> translate<T>(const T& delta, \
2126 const quadix<T, 3>& quadix); \
2127 template box<T, 3> translate<T>(const T& delta, const box<T, 3>& box); \
2128 template sphere<T> translate<T>(const T& delta, const sphere<T>& sphere); \
2129 template polygon<T, 3> translate<T>(const T& delta, \
2130 const polygon<T, 3>& polygon); \
2131 template point3d<T> translate<T>(const vector3d<T>& v, \
2132 const point3d<T>& point); \
2133 template line<T, 3> translate<T>(const vector3d<T>& v, \
2134 const line<T, 3>& line); \
2135 template segment<T, 3> translate<T>(const vector3d<T>& v, \
2136 const segment<T, 3>& segment); \
2137 template triangle<T, 3> translate<T>(const vector3d<T>& v, \
2138 const triangle<T, 3>& triangle); \
2139 template quadix<T, 3> translate<T>(const vector3d<T>& v, \
2140 const quadix<T, 3>& quadix); \
2141 template box<T, 3> translate<T>(const vector3d<T>& v, const box<T, 3>& box); \
2142 template sphere<T> translate<T>(const vector3d<T>& v, \
2143 const sphere<T>& sphere); \
2144 template polygon<T, 3> translate<T>(const vector3d<T>& v, \
2145 const polygon<T, 3>& polygon); \
2146 template point2d<T> scale<T>(const T& dx, const T& dy, \
2147 const point2d<T>& point); \
2148 template line<T, 2> scale<T>(const T& dx, const T& dy, \
2149 const line<T, 2>& line); \
2150 template segment<T, 2> scale<T>(const T& dx, const T& dy, \
2151 const segment<T, 2>& segment); \
2152 template triangle<T, 2> scale<T>(const T& dx, const T& dy, \
2153 const triangle<T, 2>& triangle); \
2154 template quadix<T, 2> scale<T>(const T& dx, const T& dy, \
2155 const quadix<T, 2>& quadix); \
2156 template rectangle<T> scale<T>(const T& dx, const T& dy, \
2157 const rectangle<T>& rectangle); \
2158 template circle<T> scale<T>(const T& dr, const circle<T>& circle); \
2159 template polygon<T, 2> scale<T>(const T& dx, const T& dy, \
2160 const polygon<T, 2>& polygon); \
2161 template point3d<T> scale<T>(const T& dx, const T& dy, const T& dz, \
2162 const point3d<T>& point); \
2163 template line<T, 3> scale<T>(const T& dx, const T& dy, const T& dz, \
2164 const line<T, 3>& line); \
2165 template segment<T, 3> scale<T>(const T& dx, const T& dy, const T& dz, \
2166 const segment<T, 3>& segment); \
2167 template triangle<T, 3> scale<T>(const T& dx, const T& dy, const T& dz, \
2168 const triangle<T, 3>& triangle); \
2169 template quadix<T, 3> scale<T>(const T& dx, const T& dy, const T& dz, \
2170 const quadix<T, 3>& quadix); \
2171 template box<T, 3> scale<T>(const T& dx, const T& dy, const T& dz, \
2172 const box<T, 3>& box); \
2173 template sphere<T> scale<T>(const T& dr, const sphere<T>& sphere); \
2174 template polygon<T, 3> scale<T>(const T& dx, const T& dy, const T& dz, \
2175 const polygon<T, 3>& polygon); \
2176 template rectangle<T> aabb<T>(const segment<T, 2>& segment); \
2177 template rectangle<T> aabb<T>(const triangle<T, 2>& triangle); \
2178 template rectangle<T> aabb<T>(const rectangle<T>& rectangle); \
2179 template rectangle<T> aabb<T>(const quadix<T, 2>& quadix); \
2180 template rectangle<T> aabb<T>(const circle<T>& circle); \
2181 template rectangle<T> aabb<T>(const polygon<T, 2>& polygon); \
2182 template void aabb<T>(const segment<T, 2>& segment, T& x1, T& y1, T& x2, \
2184 template void aabb<T>(const triangle<T, 2>& triangle, T& x1, T& y1, T& x2, \
2186 template void aabb<T>(const rectangle<T>& rectangle, T& x1, T& y1, T& x2, \
2188 template void aabb<T>(const quadix<T, 2>& quadix, T& x1, T& y1, T& x2, \
2190 template void aabb<T>(const circle<T>& circle, T& x1, T& y1, T& x2, T& y2); \
2191 template void aabb<T>(const polygon<T, 2>& polygon, T& x1, T& y1, T& x2, \
2193 template box<T, 3> aabb<T>(const segment<T, 3>& segment); \
2194 template box<T, 3> aabb<T>(const triangle<T, 3>& triangle); \
2195 template box<T, 3> aabb<T>(const box<T, 3>& rectangle); \
2196 template box<T, 3> aabb<T>(const quadix<T, 3>& quadix); \
2197 template box<T, 3> aabb<T>(const sphere<T>& sphere); \
2198 template box<T, 3> aabb<T>(const polygon<T, 3>& polygon); \
2199 template void aabb<T>(const segment<T, 3>& segment, T& x1, T& y1, T& z1, \
2200 T& x2, T& y2, T& z2); \
2201 template void aabb<T>(const triangle<T, 3>& triangle, T& x1, T& y1, T& z1, \
2202 T& x2, T& y2, T& z2); \
2203 template void aabb<T>(const box<T, 3>& box, T& x1, T& y1, T& z1, T& x2, \
2205 template void aabb<T>(const quadix<T, 3>& quadix, T& x1, T& y1, T& z1, \
2206 T& x2, T& y2, T& z2); \
2207 template void aabb<T>(const sphere<T>& sphere, T& x1, T& y1, T& z1, T& x2, \
2209 template void aabb<T>(const polygon<T, 3>& polygon, T& x1, T& y1, T& z1, \
2210 T& x2, T& y2, T& z2); \
2211 template rectangle<T> update_rectangle<T>(const rectangle<T>& rectangle, \
2212 point2d<T>& point); \
2213 template box<T, 3> update_box<T>(const box<T, 3>& box, point3d<T>& point); \
2214 template circle<T> update_circle<T>(const circle<T>& circle, \
2215 point2d<T>& point); \
2216 template sphere<T> update_sphere<T>(const sphere<T>& sphere, \
2217 point3d<T>& point); \
2218 template point2d<T> generate_point_on_segment<T>( \
2219 const segment<T, 2>& segment, const T& t); \
2220 template point3d<T> generate_point_on_segment<T>( \
2221 const segment<T, 3>& segment, const T& t); \
2222 template point2d<T> generate_point_on_ray<T>(const ray<T, 2>& ray, \
2224 template point3d<T> generate_point_on_ray<T>(const ray<T, 3>& ray, \
2226 template T generate_random_value<T>(const T& range); \
2227 template point2d<T> generate_random_point<T>(const T& dx, const T& dy); \
2228 template point3d<T> generate_random_point<T>(const T& dx, const T& dy, \
2230 template point2d<T> generate_random_point<T>(const segment<T, 2>& segment); \
2231 template point3d<T> generate_random_point<T>(const segment<T, 3>& segment); \
2232 template point2d<T> generate_random_point<T>( \
2233 const triangle<T, 2>& triangle); \
2234 template point3d<T> generate_random_point<T>( \
2235 const triangle<T, 3>& triangle); \
2236 template point2d<T> generate_random_point<T>(const quadix<T, 2>& quadix); \
2237 template point3d<T> generate_random_point<T>(const quadix<T, 3>& quadix); \
2238 template point2d<T> generate_random_point<T>(const rectangle<T>& rectangle); \
2239 template point3d<T> generate_random_point<T>(const box<T, 3>& box); \
2240 template void generate_random_points<T>( \
2241 const T& x1, const T& y1, const T& x2, const T& y2, \
2242 const std::size_t& point_count, OutputIterator2d out); \
2243 template void generate_random_points<T>(const rectangle<T>& rectangle, \
2244 const std::size_t& point_count, \
2245 OutputIterator2d out); \
2246 template void generate_random_points<T>(const segment<T, 2>& segment, \
2247 const std::size_t& point_count, \
2248 OutputIterator2d out); \
2249 template void generate_random_points<T>(const segment<T, 3>& segment, \
2250 const std::size_t& point_count, \
2251 OutputIterator2d out); \
2252 template void generate_random_points<T>(const triangle<T, 2>& triangle, \
2253 const std::size_t& point_count, \
2254 OutputIterator2d out); \
2255 template void generate_random_points<T>(const triangle<T, 3>& triangle, \
2256 const std::size_t& point_count, \
2257 OutputIterator2d out); \
2258 template void generate_random_points<T>(const quadix<T, 2>& quadix, \
2259 const std::size_t& point_count, \
2260 OutputIterator2d out); \
2261 template void generate_random_points<T>(const quadix<T, 3>& quadix, \
2262 const std::size_t& point_count, \
2263 OutputIterator2d out); \
2264 template void generate_random_points<T>(const circle<T>& circle, \
2265 const std::size_t& point_count, \
2266 OutputIterator2d out); \
2267 template void generate_random_object<T>(const T& x1, const T& y1, \
2268 const T& x2, const T& y2, \
2269 segment<T, 2>& segment); \
2270 template void generate_random_object<T>(const T& x1, const T& y1, \
2271 const T& x2, const T& y2, \
2272 rectangle<T>& rectangle); \
2273 template void generate_random_object<T>(const T& x1, const T& y1, \
2274 const T& x2, const T& y2, \
2275 triangle<T, 2>& triangle); \
2276 template void generate_random_object<T>(const T& x1, const T& y1, \
2277 const T& x2, const T& y2, \
2278 quadix<T, 2>& quadix); \
2279 template void generate_random_object<T>( \
2280 const T& x1, const T& y1, const T& x2, const T& y2, circle<T>& circle); \
2281 template void generate_random_object<T>( \
2282 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
2283 const T& z2, box<T, 3>& box); \
2284 template triangle<T, 2> right_shift<T>(const triangle<T, 2>& triangle, \
2285 const std::size_t& shift); \
2286 template triangle<T, 3> right_shift<T>(const triangle<T, 3>& triangle, \
2287 const std::size_t& shift); \
2288 template quadix<T, 2> right_shift<T>(const quadix<T, 2>& quadix, \
2289 const std::size_t& shift); \
2290 template quadix<T, 3> right_shift<T>(const quadix<T, 3>& quadix, \
2291 const std::size_t& shift); \
2292 template T vector_norm<T>(const vector2d<T>& v); \
2293 template T vector_norm<T>(const vector3d<T>& v); \
2294 template vector2d<T> normalize<T>(const vector2d<T>& v); \
2295 template vector3d<T> normalize<T>(const vector3d<T>& v); \
2296 template vector2d<T> perpendicular<T>(const vector2d<T>& v); \
2297 template vector3d<T> perpendicular<T>(const vector3d<T>& v); \
2298 template vector2d<T> operator+ \
2299 <T>(const vector2d<T>& v1, const vector2d<T>& v2); \
2300 template vector3d<T> operator+ \
2301 <T>(const vector3d<T>& v1, const vector3d<T>& v2); \
2302 template vector2d<T> operator- \
2303 <T>(const vector2d<T>& v1, const vector2d<T>& v2); \
2304 template vector3d<T> operator- \
2305 <T>(const vector3d<T>& v1, const vector3d<T>& v2); \
2306 template T operator*<T>(const vector2d<T>& v1, const vector2d<T>& v2); \
2307 template vector3d<T> operator* \
2308 <T>(const vector3d<T>& v1, const vector3d<T>& v2); \
2309 template T dot_product<T>(const vector2d<T>& v1, const vector2d<T>& v2); \
2310 template T dot_product<T>(const vector3d<T>& v1, const vector3d<T>& v2); \
2311 template T perpendicular_product<T>(const vector2d<T>& v1, \
2312 const vector2d<T>& v2); \
2313 template T triple_product<T>(const vector3d<T>& v1, const vector3d<T>& v2, \
2314 const vector3d<T>& v3); \
2315 template vector2d<T> operator*<T>(const vector2d<T>& v1, const T& scale); \
2316 template vector3d<T> operator*<T>(const vector3d<T>& v1, const T& scale); \
2317 template vector2d<T> operator*<T>(const T& scale, const vector2d<T>& v1); \
2318 template vector3d<T> operator*<T>(const T& scale, const vector3d<T>& v1); \
2319 template point2d<T> operator*<T>(const point2d<T>& point, const T& scale); \
2320 template point3d<T> operator*<T>(const point3d<T>& point, const T& scale); \
2321 template point2d<T> operator*<T>(const T& scale, const point2d<T>& point); \
2322 template point3d<T> operator*<T>(const T& scale, const point3d<T>& point); \
2323 template point2d<T> operator+ \
2324 <T>(const point2d<T>& point, const vector2d<T>& v); \
2325 template point2d<T> operator+ \
2326 <T>(const vector2d<T>& v, const point2d<T>& point); \
2327 template point3d<T> operator+ \
2328 <T>(const point3d<T>& point, const vector3d<T>& v); \
2329 template point3d<T> operator+ \
2330 <T>(const vector3d<T>& v, const point3d<T>& point); \
2331 template vector2d<T> operator- \
2332 <T>(const point2d<T>& p1, const point2d<T>& p2); \
2333 template vector3d<T> operator- \
2334 <T>(const point3d<T>& p1, const point3d<T>& p2); \
2335 template point2d<T> operator+ \
2336 <T>(const point2d<T>& p1, const point2d<T>& p2); \
2337 template point3d<T> operator+ \
2338 <T>(const point3d<T>& p1, const point3d<T>& p2); \
2339 template bool is_equal<T>(const T& val1, const T& val2, const T& epsilon); \
2340 template bool is_equal<T>(const point2d<T>& point1, \
2341 const point2d<T>& point2, const T& epsilon); \
2342 template bool is_equal<T>(const point3d<T>& point1, \
2343 const point3d<T>& point2, const T& epsilon); \
2344 template bool is_equal<T>(const T& val1, const T& val2); \
2345 template bool is_equal<T>(const point2d<T>& point1, \
2346 const point2d<T>& point2); \
2347 template bool is_equal<T>(const point3d<T>& point1, \
2348 const point3d<T>& point2); \
2349 template bool is_equal<T>(const rectangle<T>& rectangle1, \
2350 const rectangle<T>& rectangle2); \
2351 template bool is_equal<T>(const circle<T>& circle1, \
2352 const circle<T>& circle2); \
2353 template bool is_equal<T>(const box<T, 3>& box1, const box<T, 3>& box2); \
2354 template bool is_equal<T>(const sphere<T>& sphere1, \
2355 const sphere<T>& sphere2); \
2356 template bool not_equal<T>(const T& val1, const T& val2, const T& epsilon); \
2357 template bool not_equal<T>(const point2d<T>& point1, \
2358 const point2d<T>& point2, const T& epsilon); \
2359 template bool not_equal<T>(const point3d<T>& point1, \
2360 const point3d<T>& point2, const T& epsilon); \
2361 template bool not_equal<T>(const T& val1, const T& val2); \
2362 template bool not_equal<T>(const point2d<T>& point1, \
2363 const point2d<T>& point2); \
2364 template bool not_equal<T>(const point3d<T>& point1, \
2365 const point3d<T>& point2); \
2366 template bool less_than_or_equal<T>(const T& val1, const T& val2, \
2367 const T& epsilon); \
2368 template bool less_than_or_equal<T>(const T& val1, const T& val2); \
2369 template bool greater_than_or_equal<T>(const T& val1, const T& val2, \
2370 const T& epsilon); \
2371 template bool greater_than_or_equal<T>(const T& val1, const T& val2); \
2372 template bool operator< <T>(const point2d<T>& point1, \
2373 const point2d<T>& point2); \
2374 template bool operator< <T>(const point3d<T>& point1, \
2375 const point3d<T>& point2); \
2376 template bool operator> \
2377 <T>(const point2d<T>& point1, const point2d<T>& point2); \
2378 template bool operator> \
2379 <T>(const point3d<T>& point1, const point3d<T>& point2); \
2380 template bool operator== \
2381 <T>(const point2d<T>& point1, const point2d<T>& point2); \
2382 template bool operator== \
2383 <T>(const point3d<T>& point1, const point3d<T>& point2); \
2384 template bool is_degenerate<T>(const T& x1, const T& y1, const T& x2, \
2386 template bool is_degenerate<T>(const segment<T, 2>& segment); \
2387 template bool is_degenerate<T>(const line<T, 2>& line); \
2388 template bool is_degenerate<T>(const T& x1, const T& y1, const T& z1, \
2389 const T& x2, const T& y2, const T& z2); \
2390 template bool is_degenerate<T>(const segment<T, 3>& segment); \
2391 template bool is_degenerate<T>(const line<T, 3>& line); \
2392 template bool is_degenerate<T>(const triangle<T, 2>& triangle); \
2393 template bool is_degenerate<T>(const triangle<T, 3>& triangle); \
2394 template bool is_degenerate<T>(const quadix<T, 2>& quadix); \
2395 template bool is_degenerate<T>(const quadix<T, 3>& quadix); \
2396 template bool is_degenerate<T>(const rectangle<T>& rectangle); \
2397 template bool is_degenerate<T>(const circle<T>& circle); \
2398 template bool is_degenerate<T>(const sphere<T>& sphere); \
2399 template bool is_degenerate<T>(const circular_arc<T>& arc); \
2400 template point2d<T> degenerate_point2d<T>(); \
2401 template point3d<T> degenerate_point3d<T>(); \
2402 template vector2d<T> degenerate_vector2d<T>(); \
2403 template vector3d<T> degenerate_vector3d<T>(); \
2404 template ray<T, 2> degenerate_ray2d<T>(); \
2405 template ray<T, 3> degenerate_ray3d<T>(); \
2406 template line<T, 2> degenerate_line2d<T>(); \
2407 template line<T, 3> degenerate_line3d<T>(); \
2408 template segment<T, 2> degenerate_segment2d<T>(); \
2409 template segment<T, 3> degenerate_segment3d<T>(); \
2410 template triangle<T, 2> degenerate_triangle2d<T>(); \
2411 template triangle<T, 3> degenerate_triangle3d<T>(); \
2412 template quadix<T, 2> degenerate_quadix2d<T>(); \
2413 template quadix<T, 3> degenerate_quadix3d<T>(); \
2414 template rectangle<T> degenerate_rectangle<T>(); \
2415 template circle<T> degenerate_circle<T>(); \
2416 template sphere<T> degenerate_sphere<T>(); \
2417 template point2d<T> positive_infinite_point2d<T>(); \
2418 template point2d<T> negative_infinite_point2d<T>(); \
2419 template point3d<T> positive_infinite_point3d<T>(); \
2420 template point3d<T> negative_infinite_point3d<T>(); \
2421 template point2d<T> make_point<T>(const T& x, const T& y); \
2422 template point3d<T> make_point<T>(const T& x, const T& y, const T& z); \
2423 template point2d<T> make_point<T>(const point3d<T> point); \
2424 template point3d<T> make_point<T>(const point2d<T> point, const T& z); \
2425 template point2d<T> make_point<T>(const circle<T>& circle); \
2426 template point3d<T> make_point<T>(const sphere<T>& sphere); \
2427 template vector2d<T> make_vector<T>(const T& x, const T& y); \
2428 template vector3d<T> make_vector<T>(const T& x, const T& y, const T& z); \
2429 template vector2d<T> make_vector<T>(const vector3d<T> v); \
2430 template vector3d<T> make_vector<T>(const vector2d<T> v, const T& z); \
2431 template vector2d<T> make_vector<T>(const point2d<T> point); \
2432 template vector3d<T> make_vector<T>(const point3d<T> point); \
2433 template ray<T, 2> make_ray<T>(const T& ox, const T& oy, const T& dir_x, \
2435 template ray<T, 3> make_ray<T>(const T& ox, const T& oy, const T& oz, \
2436 const T& dir_x, const T& dir_y, \
2438 template ray<T, 2> make_ray<T>(const point2d<T>& origin, \
2439 const vector2d<T>& direction); \
2440 template ray<T, 3> make_ray<T>(const point3d<T>& origin, \
2441 const vector3d<T>& direction); \
2442 template ray<T, 2> make_ray<T>(const point2d<T>& origin, const T& bearing); \
2443 template curve_point<T, 2> make_curve_point<T>(const T& x, const T& y, \
2445 template curve_point<T, 3> make_curve_point<T>(const T& x, const T& y, \
2446 const T& z, const T& t); \
2447 template curve_point<T, 2> make_curve_point<T>(const point2d<T>& point, \
2449 template curve_point<T, 3> make_curve_point<T>(const point3d<T>& point, \
2451 template segment<T, 2> make_segment<T>(const T& x1, const T& y1, \
2452 const T& x2, const T& y2); \
2453 template segment<T, 3> make_segment<T>(const T& x1, const T& y1, \
2454 const T& z1, const T& x2, \
2455 const T& y2, const T& z2); \
2456 template segment<T, 2> make_segment<T>(const point2d<T>& point1, \
2457 const point2d<T>& point2); \
2458 template segment<T, 3> make_segment<T>(const point3d<T>& point1, \
2459 const point3d<T>& point2); \
2460 template segment<T, 2> make_segment<T>(const line<T, 2>& line); \
2461 template segment<T, 3> make_segment<T>(const line<T, 3>& line); \
2462 template line<T, 2> make_line<T>(const T& x1, const T& y1, const T& x2, \
2464 template line<T, 3> make_line<T>(const T& x1, const T& y1, const T& z1, \
2465 const T& x2, const T& y2, const T& z2); \
2466 template line<T, 2> make_line<T>(const point2d<T>& point1, \
2467 const point2d<T>& point2); \
2468 template line<T, 3> make_line<T>(const point3d<T>& point1, \
2469 const point3d<T>& point2); \
2470 template line<T, 2> make_line<T>(const segment<T, 2>& segment); \
2471 template line<T, 3> make_line<T>(const segment<T, 3>& segment); \
2472 template line<T, 2> make_line<T>(const ray<T, 2>& ray); \
2473 template line<T, 3> make_line<T>(const ray<T, 3>& ray); \
2474 template rectangle<T> make_rectangle<T>(const T& x1, const T& y1, \
2475 const T& x2, const T& y2); \
2476 template rectangle<T> make_rectangle<T>(const point2d<T>& point1, \
2477 const point2d<T>& point2); \
2478 template box<T, 3> make_box<T>(const T& x1, const T& y1, const T& z1, \
2479 const T& x2, const T& y2, const T& z2); \
2480 template box<T, 3> make_box<T>(const point3d<T>& point1, \
2481 const point3d<T>& point2); \
2482 template triangle<T, 2> make_triangle<T>(const T& x1, const T& y1, \
2483 const T& x2, const T& y2, \
2484 const T& x3, const T& y3); \
2485 template triangle<T, 3> make_triangle<T>( \
2486 const T& x1, const T& y1, const T& z1, const T& x2, const T& y2, \
2487 const T& z2, const T& x3, const T& y3, const T& z3); \
2488 template triangle<T, 2> make_triangle<T>(const point2d<T>& point1, \
2489 const point2d<T>& point2, \
2490 const point2d<T>& point3); \
2491 template triangle<T, 3> make_triangle<T>(const point3d<T>& point1, \
2492 const point3d<T>& point2, \
2493 const point3d<T>& point3); \
2494 template quadix<T, 2> make_quadix<T>(const T& x1, const T& y1, const T& x2, \
2495 const T& y2, const T& x3, const T& y3, \
2496 const T& x4, const T& y4); \
2497 template quadix<T, 3> make_quadix<T>(const T& x1, const T& y1, const T& z1, \
2498 const T& x2, const T& y2, const T& z2, \
2499 const T& x3, const T& y3, const T& z3, \
2500 const T& x4, const T& y4, const T& z4); \
2501 template quadix<T, 2> make_quadix<T>( \
2502 const point2d<T>& point1, const point2d<T>& point2, \
2503 const point2d<T>& point3, const point2d<T>& point4); \
2504 template quadix<T, 3> make_quadix<T>( \
2505 const point3d<T>& point1, const point3d<T>& point2, \
2506 const point3d<T>& point3, const point3d<T>& point4); \
2507 template quadix<T, 2> make_quadix<T>(const T& x1, const T& y1, const T& x2, \
2509 template quadix<T, 2> make_quadix<T>(const rectangle<T>& rectangle); \
2510 template circle<T> make_circle<T>(const T& x, const T& y, const T& radius); \
2511 template circle<T> make_circle<T>(const point2d<T>& point, const T& radius); \
2512 template circle<T> make_circle<T>(const point2d<T>& point1, \
2513 const point2d<T>& point2); \
2514 template circle<T> make_circle<T>(const point2d<T>& point1, \
2515 const point2d<T>& point2, \
2516 const point2d<T>& point3); \
2517 template circle<T> make_circle<T>(const triangle<T, 2>& triangle); \
2518 template sphere<T> make_sphere<T>(const T& x, const T& y, const T& z, \
2520 template sphere<T> make_sphere<T>(const point3d<T>& point, const T& radius); \
2521 template sphere<T> make_sphere<T>(const point3d<T>& point1, \
2522 const point3d<T>& point2); \
2523 template plane<T, 3> make_plane<T>(const T& x1, const T& y1, const T& z1, \
2524 const T& x2, const T& y2, const T& z2, \
2525 const T& x3, const T& y3, const T& z3); \
2526 template plane<T, 3> make_plane<T>(const T& px, const T& py, const T& pz, \
2527 const T& nx, const T& ny, const T& nz); \
2528 template plane<T, 3> make_plane<T>(const point3d<T>& point1, \
2529 const point3d<T>& point2, \
2530 const point3d<T>& point3); \
2531 template plane<T, 3> make_plane<T>(const point3d<T>& point, \
2532 const vector3d<T>& normal); \
2533 template plane<T, 3> make_plane<T>(const triangle<T, 3>& triangle); \
2534 template polygon<T, 2> make_polygon<T>( \
2535 const std::vector<point2d<T> >& point_list); \
2536 template polygon<T, 3> make_polygon<T>( \
2537 const std::vector<point3d<T> >& point_list); \
2538 template polygon<T, 2> make_polygon<T>(const triangle<T, 2>& triangle); \
2539 template polygon<T, 2> make_polygon<T>(const quadix<T, 2>& quadix); \
2540 template polygon<T, 2> make_polygon<T>(const rectangle<T>& rectangle); \
2541 template polygon<T, 2> make_polygon<T>(const circle<T>& circle, \
2542 const unsigned int point_count);
2544 #define INSTANTIATE_WYKOBI_ND(T, D, OutputIterator) \
2545 template bool parallel<T, D>(const line<T, D>& line1, \
2546 const line<T, D>& line2); \
2547 template bool parallel<T, D>(const segment<T, D>& segment1, \
2548 const segment<T, D>& segment2); \
2549 template bool collinear<T, D>(const pointnd<T, D>& point1, \
2550 const pointnd<T, D>& point2, \
2551 const pointnd<T, D>& point3); \
2552 template bool robust_collinear<T, D>(const pointnd<T, D>& point1, \
2553 const pointnd<T, D>& point2, \
2554 const pointnd<T, D>& point3); \
2555 template bool is_point_collinear<T, D>(const segment<T, D>& segment, \
2556 const pointnd<T, D>& point, \
2557 const bool robust); \
2558 template bool perpendicular<T, D>(const line<T, D>& line1, \
2559 const line<T, D>& line2); \
2560 template bool perpendicular<T, D>(const segment<T, D>& segment1, \
2561 const segment<T, D>& segment2); \
2562 template bool intersect<T, D>(const segment<T, D>& segment1, \
2563 const segment<T, D>& segment2, \
2565 template bool intersect<T, D>(const line<T, D>& line1, \
2566 const line<T, D>& line2, const T& fuzzy); \
2567 template pointnd<T, D> intersection_point<T, D>( \
2568 const segment<T, D>& segment1, const segment<T, D>& segment2, \
2570 template pointnd<T, D> intersection_point<T, D>( \
2571 const line<T, D>& line1, const line<T, D>& line2, const T& fuzzy); \
2572 template T distance<T, D>(const pointnd<T, D>& point1, \
2573 const pointnd<T, D>& point2); \
2574 template T distance<T, D>(const pointnd<T, D>& point, \
2575 const segment<T, D>& segment); \
2576 template T distance<T, D>(const pointnd<T, D>& point, \
2577 const line<T, D>& line); \
2578 template T distance<T, D>(const segment<T, D>& segment1, \
2579 const segment<T, D>& segment2); \
2580 template T distance<T, D>(const line<T, D>& line1, const line<T, D>& line2); \
2581 template T lay_distance<T, D>(const pointnd<T, D>& point1, \
2582 const pointnd<T, D>& point2); \
2583 template T lay_distance<T, D>(const pointnd<T, D>& point, \
2584 const segment<T, D>& segment); \
2585 template T lay_distance<T, D>(const pointnd<T, D>& point, \
2586 const line<T, D>& line); \
2587 template T lay_distance<T, D>(const segment<T, D>& segment1, \
2588 const segment<T, D>& segment2); \
2589 template T lay_distance<T, D>(const line<T, D>& line1, \
2590 const line<T, D>& line2); \
2591 template T manhattan_distance<T, D>(const pointnd<T, D>& point1, \
2592 const pointnd<T, D>& point2); \
2593 template T chebyshev_distance<T, D>(const pointnd<T, D>& point1, \
2594 const pointnd<T, D>& point2); \
2595 template T inverse_chebyshev_distance<T, D>(const pointnd<T, D>& point1, \
2596 const pointnd<T, D>& point2); \
2597 template bool point_in_box<T, D>(const pointnd<T, D>& point, \
2598 const box<T, D>& box); \
2599 template bool point_in_sphere<T, D>(const pointnd<T, D>& point, \
2600 const hypersphere<T, D>& sphere); \
2601 template pointnd<T, D> closest_point_on_segment_from_point<T, D>( \
2602 const segment<T, D>& segment, \
2603 const wykobi::segment<T, D>::PointType& point); \
2604 template pointnd<T, D> closest_point_on_line_from_point<T, D>( \
2605 const line<T, D>& segment, const wykobi::line<T, D>::PointType& point); \
2606 template pointnd<T, D> closest_point_on_sphere_from_point<T, D>( \
2607 const hypersphere<T, D>& sphere, \
2608 const wykobi::hypersphere<T, D>::PointType& point); \
2609 template pointnd<T, D> closest_point_on_plane_from_point<T, D>( \
2610 const plane<T, D>& plane, const wykobi::plane<T, D>::PointType& point); \
2611 template pointnd<T, D> closest_point_on_box_from_point<T, D>( \
2612 const box<T, D>& box, const wykobi::box<T, D>::PointType& point); \
2613 template pointnd<T, D> project_point_t<T, D>( \
2614 const pointnd<T, D>& source_point, \
2615 const pointnd<T, D>& destination_point, const T& t); \
2616 template pointnd<T, D> project_point<T, D>( \
2617 const pointnd<T, D>& source_point, \
2618 const pointnd<T, D>& destination_point, const T& distance); \
2619 template pointnd<T, D> mirror<T, D>(const pointnd<T, D>& point, \
2620 const line<T, D>& mirror_axis); \
2621 template segment<T, D> mirror<T, D>(const segment<T, D>& segment, \
2622 const line<T, D>& mirror_axis); \
2623 template line<T, D> mirror<T, D>(const line<T, D>& line, \
2624 const wykobi::line<T, D>& mirror_axis); \
2625 template box<T, D> mirror<T, D>(const box<T, D>& box, \
2626 const line<T, D>& mirror_axis); \
2627 template triangle<T, D> mirror<T, D>(const triangle<T, D>& triangle, \
2628 const line<T, D>& mirror_axis); \
2629 template quadix<T, D> mirror<T, D>(const quadix<T, D>& quadix, \
2630 const line<T, D>& mirror_axis); \
2631 template hypersphere<T, D> mirror<T, D>(const hypersphere<T, D>& sphere, \
2632 const line<T, D>& mirror_axis); \
2633 template polygon<T, D> mirror<T, D>(const polygon<T, D>& polygon, \
2634 const line<T, D>& mirror_axis); \
2635 template segment<T, D> project_onto_axis<T, D>(const pointnd<T, D>& point, \
2636 const line<T, D>& axis); \
2637 template segment<T, D> project_onto_axis<T, D>( \
2638 const triangle<T, D>& triangle, const line<T, D>& axis); \
2639 template segment<T, D> project_onto_axis<T, D>(const box<T, D>& rectangle, \
2640 const line<T, D>& axis); \
2641 template segment<T, D> project_onto_axis<T, D>(const quadix<T, D>& quadix, \
2642 const line<T, D>& axis); \
2643 template segment<T, D> project_onto_axis<T, D>( \
2644 const hypersphere<T, D>& sphere, const line<T, D>& axis); \
2645 template segment<T, D> project_onto_axis<T, D>(const polygon<T, D>& polygon, \
2646 const line<T, D>& axis); \
2647 template T perimeter<T, D>(const triangle<T, D>& triangle); \
2648 template T perimeter<T, D>(const quadix<T, D>& quadix); \
2649 template T perimeter<T, D>(const polygon<T, D>& polygon); \
2650 template pointnd<T, D> generate_random_point<T, D>( \
2651 const segment<T, D>& segment); \
2652 template pointnd<T, D> generate_random_point<T, D>( \
2653 const triangle<T, D>& triangle); \
2654 template pointnd<T, D> generate_random_point<T, D>( \
2655 const quadix<T, D>& quadix); \
2656 template pointnd<T, D> generate_random_point<T, D>(const box<T, D>& box); \
2657 template void generate_random_points<T, D, OutputIterator>( \
2658 const box<T, D>& box, const std::size_t& point_count, \
2659 OutputIterator out); \
2660 template void generate_random_points<T, D, OutputIterator>( \
2661 const segment<T, D>& segment, const std::size_t& point_count, \
2662 OutputIterator out); \
2663 template void generate_random_points<T, D, OutputIterator>( \
2664 const triangle<T, D>& triangle, const std::size_t& point_count, \
2665 OutputIterator out); \
2666 template void generate_random_points<T, D, OutputIterator>( \
2667 const quadix<T, D>& quadix, const std::size_t& point_count, \
2668 OutputIterator out); \
2669 template T vector_norm<T, D>(const vectornd<T, D>& v); \
2670 template vectornd<T, D> normalize<T, D>(const vectornd<T, D>& v); \
2671 template vectornd<T, D> operator+ \
2672 <T, D>(const vectornd<T, D>& v1, const vectornd<T, D>& v2); \
2673 template vectornd<T, D> operator- \
2674 <T, D>(const vectornd<T, D>& v1, const vectornd<T, D>& v2); \
2675 template T dot_product<T, D>(const vectornd<T, D>& v1, \
2676 const vectornd<T, D>& v2); \
2677 template vectornd<T, D> operator* \
2678 <T, D>(const vectornd<T, D>& v1, const T& scale); \
2679 template vectornd<T, D> operator* \
2680 <T, D>(const T& scale, const vectornd<T, D>& v1); \
2681 template pointnd<T, D> operator* \
2682 <T, D>(const pointnd<T, D>& point, const T& scale); \
2683 template pointnd<T, D> operator* \
2684 <T, D>(const T& scale, const pointnd<T, D>& point); \
2685 template pointnd<T, D> operator+ \
2686 <T, D>(const pointnd<T, D>& point, const vectornd<T, D>& v); \
2687 template pointnd<T, D> operator+ \
2688 <T, D>(const vectornd<T, D>& v, const pointnd<T, D>& point); \
2689 template vectornd<T, D> operator- \
2690 <T, D>(const pointnd<T, D>& p1, const pointnd<T, D>& p2); \
2691 template pointnd<T, D> operator+ \
2692 <T, D>(const pointnd<T, D>& p1, const pointnd<T, D>& p2); \
2693 template bool operator< <T, D>(const pointnd<T, D>& point1, \
2694 const pointnd<T, D>& point2); \
2695 template bool operator> \
2696 <T, D>(const pointnd<T, D>& point1, const pointnd<T, D>& point2); \
2697 template bool operator== \
2698 <T, D>(const pointnd<T, D>& point1, const pointnd<T, D>& point2); \
2699 template bool is_equal<T, D>(const pointnd<T, D>& point1, \
2700 const pointnd<T, D>& point2, const T& epsilon); \
2701 template bool is_equal<T, D>(const pointnd<T, D>& point1, \
2702 const pointnd<T, D>& point2); \
2703 template bool not_equal<T, D>(const pointnd<T, D>& point1, \
2704 const pointnd<T, D>& point2, \
2705 const T& epsilon); \
2706 template bool not_equal<T, D>(const pointnd<T, D>& point1, \
2707 const pointnd<T, D>& point2); \
2708 template pointnd<T, D> degenerate_pointnd<T, D>(); \
2709 template vectornd<T, D> degenerate_vectornd<T, D>(); \
2710 template ray<T, D> degenerate_raynd<T, D>(); \
2711 template line<T, D> degenerate_linend<T, D>(); \
2712 template segment<T, D> degenerate_segmentnd<T, D>(); \
2713 template triangle<T, D> degenerate_trianglend<T, D>(); \
2714 template quadix<T, D> degenerate_quadixnd<T, D>(); \
2715 template box<T, D> degenerate_box<T, D>(); \
2716 template hypersphere<T, D> degenerate_hypersphere<T, D>(); \
2717 template pointnd<T, D> positive_infinite_pointnd<T, D>(); \
2718 template pointnd<T, D> negative_infinite_pointnd<T, D>(); \
2719 template void swap<T, D>(pointnd<T, D> & point1, pointnd<T, D> & point2); \
2720 template vectornd<T, D> make_vector<T, D>(const pointnd<T, D>& point); \
2721 template ray<T, D> make_ray<T, D>(const pointnd<T, D>& origin, \
2722 const vectornd<T, D>& direction); \
2723 template segment<T, D> make_segment<T, D>(const pointnd<T, D>& point1, \
2724 const pointnd<T, D>& point2); \
2725 template line<T, D> make_line<T, D>(const pointnd<T, D>& point1, \
2726 const pointnd<T, D>& point2); \
2727 template box<T, D> make_box<T, D>(const pointnd<T, D>& point1, \
2728 const pointnd<T, D>& point2); \
2729 template triangle<T, D> make_triangle<T, D>(const pointnd<T, D>& point1, \
2730 const pointnd<T, D>& point2, \
2731 const pointnd<T, D>& point3); \
2732 template quadix<T, D> make_quadix<T, D>( \
2733 const pointnd<T, D>& point1, const pointnd<T, D>& point2, \
2734 const pointnd<T, D>& point3, const pointnd<T, D>& point4); \
2735 template hypersphere<T, D> make_sphere<T, D>(const pointnd<T, D>& point, \
2737 template hypersphere<T, D> make_sphere<T, D>(const pointnd<T, D>& point1, \
2738 const pointnd<T, D>& point2); \
2739 template polygon<T, D> make_polygon<T, D>( \
2740 const std::vector<pointnd<T, D> >& point_list); \
2741 template polygon<T, D> make_polygon<T, D>(const triangle<T, D>& triangle); \
2742 template polygon<T, D> make_polygon<T, D>(const quadix<T, D>& quadix);
2744 #define INSTANTIATE_WYKOBI_MATH(T) \
2745 template T sqr<T>(const T& val); \
2746 template T abs<T>(const T& value); \
2747 template T max<T>(const T& value1, const T& value2); \
2748 template T min<T>(const T& value1, const T& value2); \
2749 template T infinity<T>(); \
2750 template T sin<T>(const T& value); \
2751 template T cos<T>(const T& value); \
2752 template T tan<T>(const T& value); \
2753 template T atan<T>(const T& value); \
2754 template T approx_sin<T>(T angle); \
2755 template T approx_cos<T>(T angle); \
2756 template T approx_tan<T>(T angle); \
2757 template T clamp(const T& value, const T& low, const T& high);
2759 #define INSTANTIATE_WYKOBI_UTILITIES_1(T) \
2760 template std::ostream& operator<< <T>(std::ostream& os, \
2761 const point2d<T>& point); \
2762 template std::ostream& operator<< <T>(std::ostream& os, \
2763 const point3d<T>& point); \
2764 template std::ostream& operator<< <T>(std::ostream& os, \
2765 const ray<T, 2>& ray); \
2766 template std::ostream& operator<< <T>(std::ostream& os, \
2767 const ray<T, 3>& ray); \
2768 template std::ostream& operator<< <T>(std::ostream& os, \
2769 const vector2d<T>& v); \
2770 template std::ostream& operator<< <T>(std::ostream& os, \
2771 const vector3d<T>& v); \
2772 template std::ostream& operator<< <T>(std::ostream& os, \
2773 const circle<T>& circle); \
2774 template std::ostream& operator<< <T>(std::ostream& os, \
2775 const sphere<T>& sphere); \
2776 template std::ostream& operator<< <T>(std::ostream& os, \
2777 const rectangle<T>& rectangle); \
2778 template std::ostream& operator<< <T>(std::ostream& os, const box<T, 3>& box);
2780 #define INSTANTIATE_WYKOBI_UTILITIES_2(T, D) \
2781 template std::ostream& operator<< <T, D>(std::ostream& os, \
2782 const segment<T, D>& segment); \
2783 template std::ostream& operator<< <T, D>(std::ostream& os, \
2784 const line<T, D>& line); \
2785 template std::ostream& operator<< <T, D>(std::ostream& os, \
2786 const triangle<T, D>& triangle); \
2787 template std::ostream& operator<< <T, D>(std::ostream& os, \
2788 const quadix<T, D>& quadix);
2790 #define INSTANTIATE_WYKOBI_ALGORITHMS(T, K) \
2791 std::vector<point2d<T> > K##vec2d; \
2792 std::vector<point3d<T> > K##vec3d; \
2793 std::vector<circle<T> > K##clist; \
2794 std::vector<segment<T, 2> > K##s2dlist; \
2795 std::vector<segment<T, 3> > K##s3dlist; \
2796 std::vector<triangle<T, 2> > K##t2dlist; \
2797 rectangle<T> K##rect2d; \
2798 polygon<T, 2> K##poly2d; \
2799 circle<T> K##circle2d; \
2800 sphere<T> K##sphere3d; \
2802 algorithm::isotropic_normalization<point2d<T> > K##obj00(K##vec2d.begin(), \
2804 algorithm::isotropic_normalization<point3d<T> > K##obj01(K##vec3d.begin(), \
2806 algorithm::convex_hull_graham_scan<point2d<T> > K##obj02( \
2807 K##vec2d.begin(), K##vec2d.end(), K##vec2d.begin()); \
2808 algorithm::convex_hull_jarvis_march<point2d<T> > K##obj03( \
2809 K##vec2d.begin(), K##vec2d.end(), K##vec2d.begin()); \
2810 algorithm::convex_hull_melkman<point2d<T> > K##obj04( \
2811 K##vec2d.begin(), K##vec2d.end(), K##vec2d.begin()); \
2812 algorithm::covariance_matrix<point2d<T> > K##obj05; \
2813 algorithm::covariance_matrix<point3d<T> > K##obj06; \
2814 algorithm::ordered_polygon<point2d<T> > K##obj07( \
2815 K##vec2d.begin(), K##vec2d.end(), K##vec2d.begin()); \
2816 algorithm::naive_group_intersections<segment<T, 2> > K##obj08( \
2817 K##s2dlist.begin(), K##s2dlist.end(), K##vec2d.begin()); \
2818 algorithm::naive_group_intersections<segment<T, 3> > K##obj09( \
2819 K##s3dlist.begin(), K##s3dlist.end(), K##vec3d.begin()); \
2820 algorithm::naive_group_intersections<circle<T> > K##obj10( \
2821 K##clist.begin(), K##clist.end(), K##vec2d.begin()); \
2822 algorithm::naive_minimum_bounding_ball<point2d<T> > K##obj11( \
2823 K##vec2d.begin(), K##vec2d.end(), K##circle2d); \
2824 algorithm::naive_minimum_bounding_ball_with_ch_filter<point2d<T> > K##obj12( \
2825 K##vec2d.begin(), K##vec2d.end(), K##circle2d); \
2826 algorithm::randomized_minimum_bounding_ball<point2d<T> > K##obj13( \
2827 K##vec2d.begin(), K##vec2d.end(), K##circle2d); \
2828 algorithm::randomized_minimum_bounding_ball_with_ch_filter<point2d<T> > \
2829 K##obj14(K##vec2d.begin(), K##vec2d.end(), K##circle2d); \
2830 algorithm::ritter_minimum_bounding_ball<point2d<T> > K##obj15( \
2831 K##vec2d.begin(), K##vec2d.end(), K##circle2d); \
2832 algorithm::ritter_minimum_bounding_ball<point3d<T> > K##obj16( \
2833 K##vec3d.begin(), K##vec3d.end(), K##sphere3d); \
2834 algorithm::ritter_minimum_bounding_ball_with_ch_filter<point2d<T> > \
2835 K##obj19(K##vec2d.begin(), K##vec2d.end(), K##circle2d); \
2836 algorithm::generate_axis_projection_descriptor<T> K##obj20( \
2837 K##poly2d, K##vec2d.begin()); \
2838 algorithm::sutherland_hodgman_polygon_clipper<point2d<T> > K##obj21( \
2839 K##rect2d, K##poly2d, K##poly2d); \
2840 algorithm::polygon_triangulate<point2d<T> > K##obj23(K##poly2d, \
2841 K##t2dlist.begin());
Definition: wykobi.hpp:74
Definition: wykobi.hpp:108
Definition: wykobi.hpp:32
wykobi::point3d< float > * flt_pnt_3d
Definition: wykobi_instantiate.hpp:2846
wykobi::point2d< double > * dbl_pnt_2d
Definition: wykobi_instantiate.hpp:2844
wykobi::point2d< float > * flt_pnt_2d
Definition: wykobi_instantiate.hpp:2843
wykobi::point3d< double > * dbl_pnt_3d
Definition: wykobi_instantiate.hpp:2847
#define INSTANTIATE_WYKOBI_ALGORITHMS(T, K)
Definition: wykobi_instantiate.hpp:2790
#define INSTANTIATE_WYKOBI_MATH(T)
Definition: wykobi_instantiate.hpp:2744
#define INSTANTIATE_WYKOBI_UTILITIES_2(T, D)
Definition: wykobi_instantiate.hpp:2780
#define INSTANTIATE_WYKOBI_UTILITIES_1(T)
Definition: wykobi_instantiate.hpp:2759
#define INSTANTIATE_WYKOBI(T, InputIterator2d, InputIterator3d, OutputIterator2d, OutputIterator3d)
Definition: wykobi_instantiate.hpp:29