Go to the documentation of this file.
20 #ifndef INCLUDE_WYKOBI_ND
21 #define INCLUDE_WYKOBI_ND
32 template <
typename T, std::
size_t D>
33 inline bool parallel(
const line<T, D>& line1,
const line<T, D>& line2);
35 template <
typename T, std::
size_t D>
36 inline bool parallel(
const segment<T, D>& segment1,
37 const segment<T, D>& segment2);
39 template <
typename T, std::
size_t D>
40 inline bool perpendicular(
const line<T, D>& line1,
const line<T, D>& line2);
42 template <
typename T, std::
size_t D>
44 const segment<T, D>& segment2);
46 template <
typename T, std::
size_t D>
47 inline bool collinear(
const pointnd<T, D>& point1,
const pointnd<T, D>& point2,
48 const pointnd<T, D>& point3);
50 template <
typename T, std::
size_t D>
52 const pointnd<T, D>& point2,
53 const pointnd<T, D>& point3);
55 template <
typename T, std::
size_t D>
57 const pointnd<T, D>& point,
58 const bool robust =
false);
60 template <
typename T, std::
size_t D>
61 inline bool intersect(
const segment<T, D>& segment1,
62 const segment<T, D>& segment2,
const T& fuzzy = T(0.0));
64 template <
typename T, std::
size_t D>
65 inline bool intersect(
const line<T, D>& line1,
const line<T, D>& line2,
66 const T& fuzzy = T(0.0));
68 template <
typename T, std::
size_t D>
70 const segment<T, D>& segment2,
71 const T& fuzzy = T(0.0));
73 template <
typename T, std::
size_t D>
75 const line<T, D>& line2,
76 const T& fuzzy = T(0.0));
78 template <
typename T, std::
size_t D>
79 inline T
distance(
const pointnd<T, D>& point1,
const pointnd<T, D>& point2);
81 template <
typename T, std::
size_t D>
82 inline T
distance(
const pointnd<T, D>& point,
const segment<T, D>& segment);
84 template <
typename T, std::
size_t D>
85 inline T
distance(
const pointnd<T, D>& point,
const line<T, D>& line);
87 template <
typename T, std::
size_t D>
88 inline T
distance(
const segment<T, D>& segment1,
const segment<T, D>& segment2);
90 template <
typename T, std::
size_t D>
91 inline T
distance(
const line<T, D>& line1,
const line<T, D>& line2);
93 template <
typename T, std::
size_t D>
94 inline T
lay_distance(
const pointnd<T, D>& point1,
const pointnd<T, D>& point2);
96 template <
typename T, std::
size_t D>
97 inline T
lay_distance(
const pointnd<T, D>& point,
const segment<T, D>& segment);
99 template <
typename T, std::
size_t D>
100 inline T
lay_distance(
const pointnd<T, D>& point,
const line<T, D>& line);
102 template <
typename T, std::
size_t D>
104 const segment<T, D>& segment2);
106 template <
typename T, std::
size_t D>
107 inline T
lay_distance(
const line<T, D>& line1,
const line<T, D>& line2);
109 template <
typename T, std::
size_t D>
111 const pointnd<T, D>& point2);
113 template <
typename T, std::
size_t D>
115 const pointnd<T, D>& point2);
117 template <
typename T, std::
size_t D>
119 const pointnd<T, D>& point2);
121 template <
typename T, std::
size_t D>
123 const pointnd<T, D>& point2);
125 template <
typename T, std::
size_t D>
126 inline bool point_in_box(
const pointnd<T, D>& point,
const box<T, D>& box);
128 template <
typename T, std::
size_t D>
130 const hypersphere<T, D>& hypersphere);
132 template <
typename T, std::
size_t D>
134 const segment<T, D>& segment,
const pointnd<T, D>& point);
136 template <
typename T, std::
size_t D>
138 const line<T, D>& segment,
const pointnd<T, D>& point);
140 template <
typename T, std::
size_t D>
142 const hypersphere<T, D>& sphere,
const pointnd<T, D>& point);
144 template <
typename T, std::
size_t D>
146 const plane<T, D>& plane,
const pointnd<T, D>& point);
148 template <
typename T, std::
size_t D>
150 const box<T, D>& box,
const pointnd<T, D>& point);
152 template <
typename T, std::
size_t D>
153 inline pointnd<T, D>
project_point_t(
const pointnd<T, D>& source_point,
154 const pointnd<T, D>& destination_point,
157 template <
typename T, std::
size_t D>
158 inline pointnd<T, D>
project_point(
const pointnd<T, D>& source_point,
159 const pointnd<T, D>& destination_point,
162 template <
typename T, std::
size_t D>
163 inline pointnd<T, D>
mirror(
const pointnd<T, D>& point,
164 const line<T, D>& mirror_axis);
166 template <
typename T, std::
size_t D>
167 inline segment<T, D>
mirror(
const segment<T, D>& segment,
168 const line<T, D>& mirror_axis);
170 template <
typename T, std::
size_t D>
171 inline line<T, D>
mirror(
const line<T, D>& line,
174 template <
typename T, std::
size_t D>
175 inline box<T, D>
mirror(
const box<T, D>& box,
const line<T, D>& mirror_axis);
177 template <
typename T, std::
size_t D>
178 inline triangle<T, D>
mirror(
const triangle<T, D>& triangle,
179 const line<T, D>& mirror_axis);
181 template <
typename T, std::
size_t D>
182 inline quadix<T, D>
mirror(
const quadix<T, D>& quadix,
183 const line<T, D>& mirror_axis);
185 template <
typename T, std::
size_t D>
186 inline hypersphere<T, D>
mirror(
const hypersphere<T, D>& sphere,
187 const line<T, D>& mirror_axis);
189 template <
typename T, std::
size_t D>
190 inline polygon<T, D>
mirror(
const polygon<T, D>& polygon,
191 const line<T, D>& mirror_axis);
193 template <
typename T, std::
size_t D>
195 const line<T, D>& axis);
197 template <
typename T, std::
size_t D>
199 const line<T, D>& axis);
201 template <
typename T, std::
size_t D>
203 const line<T, D>& axis);
205 template <
typename T, std::
size_t D>
207 const line<T, D>& axis);
209 template <
typename T, std::
size_t D>
211 const line<T, D>& axis);
213 template <
typename T, std::
size_t D>
215 const line<T, D>& axis);
217 template <
typename T, std::
size_t D>
218 inline T
perimeter(
const triangle<T, D>& triangle);
220 template <
typename T, std::
size_t D>
221 inline T
perimeter(
const quadix<T, D>& quadix);
223 template <
typename T, std::
size_t D>
224 inline T
perimeter(
const polygon<T, D>& polygon);
226 template <
typename T, std::
size_t D>
229 template <
typename T, std::
size_t D>
232 template <
typename T, std::
size_t D>
235 template <
typename T, std::
size_t D>
238 template <
typename T, std::
size_t D,
typename OutputIterator>
240 const std::size_t& point_count,
243 template <
typename T, std::
size_t D,
typename OutputIterator>
245 const std::size_t& point_count,
248 template <
typename T, std::
size_t D,
typename OutputIterator>
250 const std::size_t& point_count,
253 template <
typename T, std::
size_t D,
typename OutputIterator>
255 const std::size_t& point_count,
258 template <
typename T, std::
size_t D>
261 template <
typename T, std::
size_t D>
262 inline vectornd<T, D>
normalize(
const vectornd<T, D>& v);
264 template <
typename T, std::
size_t D>
265 inline vectornd<T, D>
operator+(
const vectornd<T, D>& v1,
266 const vectornd<T, D>& v2);
268 template <
typename T, std::
size_t D>
269 inline vectornd<T, D>
operator-(
const vectornd<T, D>& v1,
270 const vectornd<T, D>& v2);
272 template <
typename T, std::
size_t D>
273 inline T
dot_product(
const vectornd<T, D>& v1,
const vectornd<T, D>& v2);
275 template <
typename T, std::
size_t D>
276 inline vectornd<T, D>
operator*(
const vectornd<T, D>& v1,
const T&
scale);
278 template <
typename T, std::
size_t D>
279 inline vectornd<T, D>
operator*(
const T&
scale,
const vectornd<T, D>& v1);
281 template <
typename T, std::
size_t D>
282 inline pointnd<T, D>
operator*(
const pointnd<T, D>& point,
const T&
scale);
284 template <
typename T, std::
size_t D>
285 inline pointnd<T, D>
operator*(
const T&
scale,
const pointnd<T, D>& point);
287 template <
typename T, std::
size_t D>
288 inline vectornd<T, D>
operator/(
const vectornd<T, D>& v1,
const T&
scale);
290 template <
typename T, std::
size_t D>
291 inline pointnd<T, D>
operator/(
const pointnd<T, D>& point,
const T&
scale);
293 template <
typename T, std::
size_t D>
294 inline pointnd<T, D>
operator+(
const pointnd<T, D>& point,
295 const vectornd<T, D>& v);
297 template <
typename T, std::
size_t D>
298 inline pointnd<T, D>
operator+(
const vectornd<T, D>& v,
299 const pointnd<T, D>& point);
301 template <
typename T, std::
size_t D>
302 inline vectornd<T, D>
operator-(
const pointnd<T, D>& p1,
303 const pointnd<T, D>& p2);
305 template <
typename T, std::
size_t D>
306 inline pointnd<T, D>
operator+(
const pointnd<T, D>& p1,
307 const pointnd<T, D>& p2);
309 template <
typename T>
310 inline T
operator*(
const vectornd<T, 2>& v1,
const vectornd<T, 2>& v2);
312 template <
typename T>
313 inline vectornd<T, 3>
operator*(
const vectornd<T, 3>& v1,
314 const vectornd<T, 3>& v2);
316 template <
typename T, std::
size_t D>
317 inline bool operator<(
const pointnd<T, D>& point1,
const pointnd<T, D>& point2);
319 template <
typename T, std::
size_t D>
320 inline bool operator>(
const pointnd<T, D>& point1,
const pointnd<T, D>& point2);
322 template <
typename T, std::
size_t D>
323 inline bool operator==(
const pointnd<T, D>& point1,
324 const pointnd<T, D>& point2);
326 template <
typename T, std::
size_t D>
327 inline bool is_equal(
const pointnd<T, D>& point1,
const pointnd<T, D>& point2,
330 template <
typename T, std::
size_t D>
331 inline bool is_equal(
const pointnd<T, D>& point1,
const pointnd<T, D>& point2);
333 template <
typename T, std::
size_t D>
334 inline bool not_equal(
const pointnd<T, D>& point1,
const pointnd<T, D>& point2,
337 template <
typename T, std::
size_t D>
338 inline bool not_equal(
const pointnd<T, D>& point1,
const pointnd<T, D>& point2);
340 template <
typename T, std::
size_t D>
343 template <
typename T, std::
size_t D>
346 template <
typename T, std::
size_t D>
349 template <
typename T, std::
size_t D>
352 template <
typename T, std::
size_t D>
355 template <
typename T, std::
size_t D>
358 template <
typename T, std::
size_t D>
361 template <
typename T, std::
size_t D>
364 template <
typename T, std::
size_t D>
367 template <
typename T, std::
size_t D>
370 template <
typename T, std::
size_t D>
373 template <
typename T, std::
size_t D>
374 inline void swap(pointnd<T, D>& point1, pointnd<T, D>& point2);
376 template <
typename T, std::
size_t D>
377 inline vectornd<T, D>
make_vector(
const pointnd<T, D>& point);
379 template <
typename T, std::
size_t D>
380 inline ray<T, D>
make_ray(
const pointnd<T, D>& origin,
381 const vectornd<T, D>& direction);
383 template <
typename T, std::
size_t D>
384 inline segment<T, D>
make_segment(
const pointnd<T, D>& point1,
385 const pointnd<T, D>& point2);
387 template <
typename T, std::
size_t D>
388 inline line<T, D>
make_line(
const pointnd<T, D>& point1,
389 const pointnd<T, D>& point2);
391 template <
typename T, std::
size_t D>
392 inline box<T, D>
make_box(
const pointnd<T, D>& point1,
393 const pointnd<T, D>& point2);
395 template <
typename T, std::
size_t D>
396 inline triangle<T, D>
make_triangle(
const pointnd<T, D>& point1,
397 const pointnd<T, D>& point2,
398 const pointnd<T, D>& point3);
400 template <
typename T, std::
size_t D>
401 inline quadix<T, D>
make_quadix(
const pointnd<T, D>& point1,
402 const pointnd<T, D>& point2,
403 const pointnd<T, D>& point3,
404 const pointnd<T, D>& point4);
406 template <
typename T, std::
size_t D>
407 inline hypersphere<T, D>
make_sphere(
const pointnd<T, D>& point,
410 template <
typename T, std::
size_t D>
411 inline hypersphere<T, D>
make_sphere(
const pointnd<T, D>& point1,
412 const pointnd<T, D>& point2);
414 template <
typename T, std::
size_t D>
416 const std::vector<pointnd<T, D> >& point_list);
418 template <
typename T, std::
size_t D>
419 inline polygon<T, D>
make_polygon(
const triangle<T, D>& triangle);
421 template <
typename T, std::
size_t D>
422 inline polygon<T, D>
make_polygon(
const quadix<T, D>& quadix);
426 #include "wykobi_nd.inl"
void generate_random_points(const T &x1, const T &y1, const T &x2, const T &y2, const std::size_t &point_count, OutputIterator out)
bool point_in_sphere(const T &px, const T &py, const T &pz, const T &cx, const T &cy, const T &cz, const T &radius)
vector2d< T > operator+(const vector2d< T > &v1, const vector2d< T > &v2)
T lay_distance(const T &x1, const T &y1, const T &x2, const T &y2)
bool intersect(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
T chebyshev_distance(const T &x1, const T &y1, const T &x2, const T &y2)
vector2d< T > operator-(const vector2d< T > &v1, const vector2d< T > &v2)
T vector_norm(const vector2d< T > &v)
vector2d< T > operator/(const vector2d< T > &v1, const T &scale)
bool not_equal(const T &val1, const T &val2, const T &epsilon)
pointnd< T, D > positive_infinite_pointnd()
vectornd< T, D > degenerate_vectornd()
bool is_point_collinear(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py, const bool robust=false)
Definition: wykobi.hpp:287
T dot_product(const vector2d< T > &v1, const vector2d< T > &v2)
triangle< T, D > degenerate_trianglend()
ray< T, D > degenerate_raynd()
box< T, D > degenerate_box()
void closest_point_on_line_from_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py, T &nx, T &ny)
bool operator<(const point2d< T > &point1, const point2d< T > &point2)
T manhattan_distance(const T &x1, const T &y1, const T &x2, const T &y2)
T inverse_chebyshev_distance(const T &x1, const T &y1, const T &x2, const T &y2)
void closest_point_on_segment_from_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &px, const T &py, T &nx, T &ny)
pointnd< T, D > negative_infinite_pointnd()
line< T, D > degenerate_linend()
bool parallel(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &epsilon=T(Epsilon))
void mirror(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, T &nx, T &ny)
point2d< T > generate_random_point(const T &dx, const T &dy)
T perimeter(const point2d< T > &point1, const point2d< T > &point2, const point2d< T > &point3)
bool robust_collinear(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &epsilon=T(Epsilon))
void project_point(const T &srcx, const T &srcy, const T &destx, const T &desty, const T &dist, T &nx, T &ny)
ray< T, 2 > make_ray(const T &ox, const T &oy, const T &dir_x, const T &dir_y)
triangle< T, 2 > make_triangle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
vector2d< T > normalize(const vector2d< T > &v)
bool point_in_box(const T &px, const T &py, const T &pz, const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2)
bool perpendicular(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, const T &epsilon=T(Epsilon))
bool operator>(const point2d< T > &point1, const point2d< T > &point2)
line< T, 2 > make_line(const T &x1, const T &y1, const T &x2, const T &y2)
void closest_point_on_box_from_point(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2, const T &px, const T &py, const T &pz, T &nx, T &ny, T &nz)
void project_point_t(const T &srcx, const T &srcy, const T &destx, const T &desty, const T &t, T &nx, T &ny)
void intersection_point(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4, T &ix, T &iy)
point3d< T > closest_point_on_sphere_from_point(const sphere< T > &sphere, const point3d< T > &point)
box< T, 3 > make_box(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2)
polygon< T, D > make_polygon(const InputIterator begin, const InputIterator end)
void swap(point2d< T > &point1, point2d< T > &point2)
quadix< T, D > degenerate_quadixnd()
hypersphere< T, D > degenerate_hypersphere()
vector2d< T > make_vector(const T &x, const T &y)
segment< T, 2 > project_onto_axis(const point2d< T > &point, const line< T, 2 > &axis)
Definition: wykobi.hpp:32
T operator*(const vector2d< T > &v1, const vector2d< T > &v2)
pointnd< T, D > degenerate_pointnd()
point2d< T > scale(const T &dx, const T &dy, const point2d< T > &point)
segment< T, D > degenerate_segmentnd()
bool is_equal(const T &val1, const T &val2, const T &epsilon)
quadix< T, 2 > make_quadix(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &x4, const T &y4)
point3d< T > closest_point_on_plane_from_point(const plane< T, 3 > &plane, const point3d< T > &point)
sphere< T > make_sphere(const T &x, const T &y, const T &z, const T &radius)
bool operator==(const point2d< T > &point1, const point2d< T > &point2)
T distance(const T &x1, const T &y1, const T &x2, const T &y2)
segment< T, 2 > make_segment(const T &x1, const T &y1, const T &x2, const T &y2)
bool collinear(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3, const T &epsilon=T(Epsilon))