biped-stabilizer 1.5.0
Stabilizer for Biped Locomotion
Loading...
Searching...
No Matches
wykobi_nd.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_ND
21#define INCLUDE_WYKOBI_ND
22
23#include <algorithm>
24#include <cassert>
25#include <limits>
26#include <vector>
27
28#include "wykobi.hpp"
29#include "wykobi_math.hpp"
30
31namespace wykobi {
32template <typename T, std::size_t D>
33inline bool parallel(const line<T, D>& line1, const line<T, D>& line2);
34
35template <typename T, std::size_t D>
36inline bool parallel(const segment<T, D>& segment1,
37 const segment<T, D>& segment2);
38
39template <typename T, std::size_t D>
40inline bool perpendicular(const line<T, D>& line1, const line<T, D>& line2);
41
42template <typename T, std::size_t D>
43inline bool perpendicular(const segment<T, D>& segment1,
44 const segment<T, D>& segment2);
45
46template <typename T, std::size_t D>
47inline bool collinear(const pointnd<T, D>& point1, const pointnd<T, D>& point2,
48 const pointnd<T, D>& point3);
49
50template <typename T, std::size_t D>
51inline bool robust_collinear(const pointnd<T, D>& point1,
52 const pointnd<T, D>& point2,
53 const pointnd<T, D>& point3);
54
55template <typename T, std::size_t D>
57 const pointnd<T, D>& point,
58 const bool robust = false);
59
60template <typename T, std::size_t D>
61inline bool intersect(const segment<T, D>& segment1,
62 const segment<T, D>& segment2, const T& fuzzy = T(0.0));
63
64template <typename T, std::size_t D>
65inline bool intersect(const line<T, D>& line1, const line<T, D>& line2,
66 const T& fuzzy = T(0.0));
67
68template <typename T, std::size_t D>
70 const segment<T, D>& segment2,
71 const T& fuzzy = T(0.0));
72
73template <typename T, std::size_t D>
75 const line<T, D>& line2,
76 const T& fuzzy = T(0.0));
77
78template <typename T, std::size_t D>
79inline T distance(const pointnd<T, D>& point1, const pointnd<T, D>& point2);
80
81template <typename T, std::size_t D>
82inline T distance(const pointnd<T, D>& point, const segment<T, D>& segment);
83
84template <typename T, std::size_t D>
85inline T distance(const pointnd<T, D>& point, const line<T, D>& line);
86
87template <typename T, std::size_t D>
88inline T distance(const segment<T, D>& segment1, const segment<T, D>& segment2);
89
90template <typename T, std::size_t D>
91inline T distance(const line<T, D>& line1, const line<T, D>& line2);
92
93template <typename T, std::size_t D>
94inline T lay_distance(const pointnd<T, D>& point1, const pointnd<T, D>& point2);
95
96template <typename T, std::size_t D>
97inline T lay_distance(const pointnd<T, D>& point, const segment<T, D>& segment);
98
99template <typename T, std::size_t D>
100inline T lay_distance(const pointnd<T, D>& point, const line<T, D>& line);
101
102template <typename T, std::size_t D>
103inline T lay_distance(const segment<T, D>& segment1,
104 const segment<T, D>& segment2);
105
106template <typename T, std::size_t D>
107inline T lay_distance(const line<T, D>& line1, const line<T, D>& line2);
108
109template <typename T, std::size_t D>
110inline T manhattan_distance(const pointnd<T, D>& point1,
111 const pointnd<T, D>& point2);
112
113template <typename T, std::size_t D>
114inline T chebyshev_distance(const pointnd<T, D>& point1,
115 const pointnd<T, D>& point2);
116
117template <typename T, std::size_t D>
118inline T manhattan_distance(const pointnd<T, D>& point1,
119 const pointnd<T, D>& point2);
120
121template <typename T, std::size_t D>
123 const pointnd<T, D>& point2);
124
125template <typename T, std::size_t D>
126inline bool point_in_box(const pointnd<T, D>& point, const box<T, D>& box);
127
128template <typename T, std::size_t D>
129inline bool point_in_sphere(const pointnd<T, D>& point,
131
132template <typename T, std::size_t D>
134 const segment<T, D>& segment, const pointnd<T, D>& point);
135
136template <typename T, std::size_t D>
138 const line<T, D>& segment, const pointnd<T, D>& point);
139
140template <typename T, std::size_t D>
142 const hypersphere<T, D>& sphere, const pointnd<T, D>& point);
143
144template <typename T, std::size_t D>
146 const plane<T, D>& plane, const pointnd<T, D>& point);
147
148template <typename T, std::size_t D>
150 const box<T, D>& box, const pointnd<T, D>& point);
151
152template <typename T, std::size_t D>
153inline pointnd<T, D> project_point_t(const pointnd<T, D>& source_point,
154 const pointnd<T, D>& destination_point,
155 const T& t);
156
157template <typename T, std::size_t D>
158inline pointnd<T, D> project_point(const pointnd<T, D>& source_point,
159 const pointnd<T, D>& destination_point,
160 const T& distance);
161
162template <typename T, std::size_t D>
164 const line<T, D>& mirror_axis);
165
166template <typename T, std::size_t D>
168 const line<T, D>& mirror_axis);
169
170template <typename T, std::size_t D>
172 const wykobi::line<T, D>& mirror_axis);
173
174template <typename T, std::size_t D>
175inline box<T, D> mirror(const box<T, D>& box, const line<T, D>& mirror_axis);
176
177template <typename T, std::size_t D>
179 const line<T, D>& mirror_axis);
180
181template <typename T, std::size_t D>
183 const line<T, D>& mirror_axis);
184
185template <typename T, std::size_t D>
187 const line<T, D>& mirror_axis);
188
189template <typename T, std::size_t D>
191 const line<T, D>& mirror_axis);
192
193template <typename T, std::size_t D>
195 const line<T, D>& axis);
196
197template <typename T, std::size_t D>
199 const line<T, D>& axis);
200
201template <typename T, std::size_t D>
203 const line<T, D>& axis);
204
205template <typename T, std::size_t D>
207 const line<T, D>& axis);
208
209template <typename T, std::size_t D>
211 const line<T, D>& axis);
212
213template <typename T, std::size_t D>
215 const line<T, D>& axis);
216
217template <typename T, std::size_t D>
219
220template <typename T, std::size_t D>
221inline T perimeter(const quadix<T, D>& quadix);
222
223template <typename T, std::size_t D>
225
226template <typename T, std::size_t D>
228
229template <typename T, std::size_t D>
231
232template <typename T, std::size_t D>
234
235template <typename T, std::size_t D>
237
238template <typename T, std::size_t D, typename OutputIterator>
240 const std::size_t& point_count,
241 OutputIterator out);
242
243template <typename T, std::size_t D, typename OutputIterator>
245 const std::size_t& point_count,
246 OutputIterator out);
247
248template <typename T, std::size_t D, typename OutputIterator>
250 const std::size_t& point_count,
251 OutputIterator out);
252
253template <typename T, std::size_t D, typename OutputIterator>
255 const std::size_t& point_count,
256 OutputIterator out);
257
258template <typename T, std::size_t D>
259inline T vector_norm(const vectornd<T, D>& v);
260
261template <typename T, std::size_t D>
263
264template <typename T, std::size_t D>
266 const vectornd<T, D>& v2);
267
268template <typename T, std::size_t D>
270 const vectornd<T, D>& v2);
271
272template <typename T, std::size_t D>
273inline T dot_product(const vectornd<T, D>& v1, const vectornd<T, D>& v2);
274
275template <typename T, std::size_t D>
276inline vectornd<T, D> operator*(const vectornd<T, D>& v1, const T& scale);
277
278template <typename T, std::size_t D>
279inline vectornd<T, D> operator*(const T& scale, const vectornd<T, D>& v1);
280
281template <typename T, std::size_t D>
282inline pointnd<T, D> operator*(const pointnd<T, D>& point, const T& scale);
283
284template <typename T, std::size_t D>
285inline pointnd<T, D> operator*(const T& scale, const pointnd<T, D>& point);
286
287template <typename T, std::size_t D>
288inline vectornd<T, D> operator/(const vectornd<T, D>& v1, const T& scale);
289
290template <typename T, std::size_t D>
291inline pointnd<T, D> operator/(const pointnd<T, D>& point, const T& scale);
292
293template <typename T, std::size_t D>
295 const vectornd<T, D>& v);
296
297template <typename T, std::size_t D>
299 const pointnd<T, D>& point);
300
301template <typename T, std::size_t D>
303 const pointnd<T, D>& p2);
304
305template <typename T, std::size_t D>
307 const pointnd<T, D>& p2);
308
309template <typename T>
310inline T operator*(const vectornd<T, 2>& v1, const vectornd<T, 2>& v2);
311
312template <typename T>
314 const vectornd<T, 3>& v2);
315
316template <typename T, std::size_t D>
317inline bool operator<(const pointnd<T, D>& point1, const pointnd<T, D>& point2);
318
319template <typename T, std::size_t D>
320inline bool operator>(const pointnd<T, D>& point1, const pointnd<T, D>& point2);
321
322template <typename T, std::size_t D>
323inline bool operator==(const pointnd<T, D>& point1,
324 const pointnd<T, D>& point2);
325
326template <typename T, std::size_t D>
327inline bool is_equal(const pointnd<T, D>& point1, const pointnd<T, D>& point2,
328 const T& epsilon);
329
330template <typename T, std::size_t D>
331inline bool is_equal(const pointnd<T, D>& point1, const pointnd<T, D>& point2);
332
333template <typename T, std::size_t D>
334inline bool not_equal(const pointnd<T, D>& point1, const pointnd<T, D>& point2,
335 const T& epsilon);
336
337template <typename T, std::size_t D>
338inline bool not_equal(const pointnd<T, D>& point1, const pointnd<T, D>& point2);
339
340template <typename T, std::size_t D>
342
343template <typename T, std::size_t D>
345
346template <typename T, std::size_t D>
348
349template <typename T, std::size_t D>
351
352template <typename T, std::size_t D>
354
355template <typename T, std::size_t D>
357
358template <typename T, std::size_t D>
360
361template <typename T, std::size_t D>
363
364template <typename T, std::size_t D>
366
367template <typename T, std::size_t D>
369
370template <typename T, std::size_t D>
372
373template <typename T, std::size_t D>
374inline void swap(pointnd<T, D>& point1, pointnd<T, D>& point2);
375
376template <typename T, std::size_t D>
378
379template <typename T, std::size_t D>
380inline ray<T, D> make_ray(const pointnd<T, D>& origin,
381 const vectornd<T, D>& direction);
382
383template <typename T, std::size_t D>
385 const pointnd<T, D>& point2);
386
387template <typename T, std::size_t D>
388inline line<T, D> make_line(const pointnd<T, D>& point1,
389 const pointnd<T, D>& point2);
390
391template <typename T, std::size_t D>
392inline box<T, D> make_box(const pointnd<T, D>& point1,
393 const pointnd<T, D>& point2);
394
395template <typename T, std::size_t D>
397 const pointnd<T, D>& point2,
398 const pointnd<T, D>& point3);
399
400template <typename T, std::size_t D>
402 const pointnd<T, D>& point2,
403 const pointnd<T, D>& point3,
404 const pointnd<T, D>& point4);
405
406template <typename T, std::size_t D>
408 const T& radius);
409
410template <typename T, std::size_t D>
412 const pointnd<T, D>& point2);
413
414template <typename T, std::size_t D>
416 const std::vector<pointnd<T, D> >& point_list);
417
418template <typename T, std::size_t D>
420
421template <typename T, std::size_t D>
423
424} // namespace wykobi
425
426#include "wykobi_nd.inl"
427
428#endif
Definition wykobi.hpp:702
Definition wykobi.hpp:440
Definition wykobi.hpp:287
Definition wykobi.hpp:688
Definition wykobi.hpp:166
Definition wykobi.hpp:383
Definition wykobi.hpp:359
Definition wykobi.hpp:674
Definition wykobi.hpp:263
Definition wykobi.hpp:433
Definition wykobi.hpp:311
Definition wykobi.hpp:614
Definition wykobi.hpp:32
T manhattan_distance(const T &x1, const T &y1, const T &x2, const T &y2)
T vector_norm(const vector2d< T > &v)
sphere< T > make_sphere(const T &x, const T &y, const T &z, const T &radius)
vector2d< T > normalize(const vector2d< T > &v)
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)
void swap(point2d< T > &point1, point2d< T > &point2)
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)
void project_point(const T &srcx, const T &srcy, const T &destx, const T &desty, const T &dist, T &nx, T &ny)
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))
T epsilon()
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 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)
bool operator<(const point2d< T > &point1, const point2d< T > &point2)
bool is_equal(const T &val1, const T &val2, const T &epsilon)
vectornd< T, D > degenerate_vectornd()
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))
box< T, D > degenerate_box()
pointnd< T, D > negative_infinite_pointnd()
point2d< T > generate_random_point(const T &dx, const T &dy)
ray< T, 2 > make_ray(const T &ox, const T &oy, const T &dir_x, const T &dir_y)
T perimeter(const point2d< T > &point1, const point2d< T > &point2, const point2d< T > &point3)
ray< T, D > degenerate_raynd()
void project_point_t(const T &srcx, const T &srcy, const T &destx, const T &desty, const T &t, T &nx, T &ny)
bool operator>(const point2d< T > &point1, const point2d< T > &point2)
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)
vector2d< T > operator+(const vector2d< T > &v1, const vector2d< T > &v2)
hypersphere< T, D > degenerate_hypersphere()
segment< T, 2 > project_onto_axis(const point2d< T > &point, const line< T, 2 > &axis)
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)
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 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)
bool not_equal(const T &val1, const T &val2, const T &epsilon)
T chebyshev_distance(const T &x1, const T &y1, const T &x2, const T &y2)
box< T, 3 > make_box(const T &x1, const T &y1, const T &z1, const T &x2, const T &y2, const T &z2)
quadix< T, D > degenerate_quadixnd()
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)
T lay_distance(const T &x1, const T &y1, const T &x2, const T &y2)
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)
triangle< T, D > degenerate_trianglend()
vector2d< T > operator-(const vector2d< T > &v1, const vector2d< T > &v2)
void generate_random_points(const T &x1, const T &y1, const T &x2, const T &y2, const std::size_t &point_count, OutputIterator out)
T operator*(const vector2d< T > &v1, const vector2d< T > &v2)
point3d< T > closest_point_on_plane_from_point(const plane< T, 3 > &plane, const point3d< T > &point)
segment< T, 2 > make_segment(const T &x1, const T &y1, const T &x2, const T &y2)
bool operator==(const point2d< T > &point1, const point2d< T > &point2)
point2d< T > scale(const T &dx, const T &dy, const point2d< T > &point)
void mirror(const T &px, const T &py, const T &x1, const T &y1, const T &x2, const T &y2, T &nx, T &ny)
line< T, 2 > make_line(const T &x1, const T &y1, const T &x2, const T &y2)
triangle< T, 2 > make_triangle(const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3)
segment< T, D > degenerate_segmentnd()
T dot_product(const vector2d< T > &v1, const vector2d< T > &v2)
vector2d< T > operator/(const vector2d< T > &v1, const T &scale)
pointnd< T, D > positive_infinite_pointnd()
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)
line< T, D > degenerate_linend()
polygon< T, D > make_polygon(const InputIterator begin, const InputIterator end)
T inverse_chebyshev_distance(const T &x1, const T &y1, const T &x2, const T &y2)
T distance(const T &x1, const T &y1, const T &x2, const T &y2)
pointnd< T, D > degenerate_pointnd()
vector2d< T > make_vector(const T &x, const T &y)