wykobi_instantiate.hpp
Go to the documentation of this file.
1 /*
2 (***********************************************************************)
3 (* *)
4 (* Wykobi Computational Geometry Library *)
5 (* Release Version 0.0.5 *)
6 (* http://www.wykobi.com *)
7 (* Copyright (c) 2005-2017 Arash Partow, All Rights Reserved. *)
8 (* *)
9 (* The Wykobi computational geometry library and its components are *)
10 (* supplied under the terms of the open source MIT License. *)
11 (* The contents of the Wykobi computational geometry library and its *)
12 (* components may not be copied or disclosed except in accordance with *)
13 (* the terms of the MIT License. *)
14 (* *)
15 (* URL: https://opensource.org/licenses/MIT *)
16 (* *)
17 (***********************************************************************)
18 */
19 
20 #ifndef INCLUDE_WYKOBI_INSTANTIATE
21 #define INCLUDE_WYKOBI_INSTANTIATE
22 
23 #include "wykobi.hpp"
24 #include "wykobi_algorithm.hpp"
25 #include "wykobi_nd.hpp"
26 #include "wykobi_utilities.hpp"
27 
28 namespace wykobi {
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, \
45  const T& py); \
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, \
90  const T& py); \
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, \
110  const T& epsilon); \
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, \
122  const T& epsilon); \
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, \
370  const T& fuzzy); \
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, \
376  const T& fuzzy); \
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, \
450  const int orient); \
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, \
459  const T& oy); \
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, \
463  const T& oy); \
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, \
475  const T& epsilon); \
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, \
486  const T& epsilon); \
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, \
495  const T& epsilon); \
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, \
509  const T& epsilon); \
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, \
522  const T& epsilon); \
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, \
534  const T& epsilon); \
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, \
547  const T& epsilon); \
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, \
559  const T& epsilon); \
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, \
770  const T& radius); \
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, \
875  const T& angle2); \
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, \
963  T& px, T& py); \
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, \
975  T& py); \
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, \
979  T& py, T& pz); \
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, \
990  T& py); \
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, \
994  T& py, T& pz); \
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, \
1061  const T& y3); \
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, \
1100  T& nz); \
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, \
1107  T& nz); \
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, \
1114  T& nz); \
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, \
1121  T& nz); \
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, \
1128  T& nz); \
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, \
1131  const T& py); \
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, \
1141  const T& py); \
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, \
1151  const T& py); \
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, \
1186  const T& py); \
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, \
1194  T& nz); \
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, \
1205  T& ny); \
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, \
1243  const T& y2); \
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, \
1268  const T& y2); \
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, \
1274  T& midy); \
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, \
1296  T& y); \
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); \
1339  template void \
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, \
1511  const T& y2); \
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, \
1539  const T& y2); \
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, \
1555  const T& y2); \
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, \
1667  T& nx, T& ny); \
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, \
1679  T& nx, T& ny); \
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, \
1696  const T& t); \
1697  template point3d<T> project_point_t<T>(const point3d<T>& source_point, \
1698  const point3d<T>& destination_point, \
1699  const T& t); \
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, \
1764  T& bz); \
1765  template void calculate_bezier_coefficients<T>( \
1766  const cubic_bezier<T, 2>& bezier, T& ax, T& bx, T& cx, T& ay, T& by, \
1767  T& cy); \
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, \
1865  const T& amount); \
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, \
1869  const T& amount); \
1870  template segment<T, 3> shorten_segment<T>(const segment<T, 3>& segment, \
1871  const T& amount); \
1872  template void lengthen_segment<T>(T & x1, T & y1, T & x2, T & y2, \
1873  const T& amount); \
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, \
1877  const T& amount); \
1878  template segment<T, 3> lengthen_segment<T>(const segment<T, 3>& segment, \
1879  const T& amount); \
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, \
1903  box<T, 3>& cbox); \
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, \
1927  T& nx, T& ny); \
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, \
2183  T& y2); \
2184  template void aabb<T>(const triangle<T, 2>& triangle, T& x1, T& y1, T& x2, \
2185  T& y2); \
2186  template void aabb<T>(const rectangle<T>& rectangle, T& x1, T& y1, T& x2, \
2187  T& y2); \
2188  template void aabb<T>(const quadix<T, 2>& quadix, T& x1, T& y1, T& x2, \
2189  T& y2); \
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, \
2192  T& y2); \
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, \
2204  T& y2, T& z2); \
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, \
2208  T& y2, T& z2); \
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, \
2223  const T& t); \
2224  template point3d<T> generate_point_on_ray<T>(const ray<T, 3>& ray, \
2225  const T& t); \
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, \
2229  const T& dz); \
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, \
2385  const T& y2); \
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, \
2434  const T& dir_y); \
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, \
2437  const T& dir_z); \
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, \
2444  const T& t); \
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, \
2448  const T& t); \
2449  template curve_point<T, 3> make_curve_point<T>(const point3d<T>& point, \
2450  const T& t); \
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, \
2463  const T& y2); \
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, \
2508  const T& y2); \
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, \
2519  const T& radius); \
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);
2543 
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, \
2564  const T& fuzzy); \
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, \
2569  const T& fuzzy); \
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, \
2736  const T& radius); \
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);
2743 
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);
2758 
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);
2779 
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);
2789 
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; \
2801  \
2802  algorithm::isotropic_normalization<point2d<T> > K##obj00(K##vec2d.begin(), \
2803  K##vec2d.end()); \
2804  algorithm::isotropic_normalization<point3d<T> > K##obj01(K##vec3d.begin(), \
2805  K##vec3d.end()); \
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());
2842 
2845 
2848 
2851 
2852 /*
2853 typedef pointnd<float, 4> pointnd_flt_4;
2854 typedef pointnd<float, 5> pointnd_flt_5;
2855 typedef pointnd<float, 6> pointnd_flt_6;
2856 typedef pointnd<float, 7> pointnd_flt_7;
2857 typedef pointnd<float, 8> pointnd_flt_8;
2858 typedef pointnd<float, 9> pointnd_flt_9;
2859 typedef pointnd<float,10> pointnd_flt_10;
2860 
2861 typedef pointnd<double, 4> pointnd_dbl_4;
2862 typedef pointnd<double, 5> pointnd_dbl_5;
2863 typedef pointnd<double, 6> pointnd_dbl_6;
2864 typedef pointnd<double, 7> pointnd_dbl_7;
2865 typedef pointnd<double, 8> pointnd_dbl_8;
2866 typedef pointnd<double, 9> pointnd_dbl_9;
2867 typedef pointnd<double,10> pointnd_dbl_10;
2868 
2869 INSTANTIATE_WYKOBI_ND(float, 4, pointnd_flt_4)
2870 INSTANTIATE_WYKOBI_ND(float, 5, pointnd_flt_5)
2871 INSTANTIATE_WYKOBI_ND(float, 6, pointnd_flt_6)
2872 INSTANTIATE_WYKOBI_ND(float, 7, pointnd_flt_7)
2873 INSTANTIATE_WYKOBI_ND(float, 8, pointnd_flt_8)
2874 INSTANTIATE_WYKOBI_ND(float, 9, pointnd_flt_9)
2875 INSTANTIATE_WYKOBI_ND(float, 10, pointnd_flt_10)
2876 
2877 INSTANTIATE_WYKOBI_ND(double, 4, pointnd_dbl_4)
2878 INSTANTIATE_WYKOBI_ND(double, 5, pointnd_dbl_5)
2879 INSTANTIATE_WYKOBI_ND(double, 6, pointnd_dbl_6)
2880 INSTANTIATE_WYKOBI_ND(double, 7, pointnd_dbl_7)
2881 INSTANTIATE_WYKOBI_ND(double, 8, pointnd_dbl_8)
2882 INSTANTIATE_WYKOBI_ND(double, 9, pointnd_dbl_9)
2883 INSTANTIATE_WYKOBI_ND(double, 10, pointnd_dbl_10)
2884 */
2885 
2888 
2891 
2894 
2897 
2900 
2901 } // namespace wykobi
2902 
2903 #endif
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