/Users/enrico/Ricerca/develop/PINS/pins-mechatronix/LibSources/submodules/Clothoids/src/Clothoids/Dubins.hxx Source File

Clothoids: /Users/enrico/Ricerca/develop/PINS/pins-mechatronix/LibSources/submodules/Clothoids/src/Clothoids/Dubins.hxx Source File
Clothoids
Dubins.hxx
1/*--------------------------------------------------------------------------*\
2 | |
3 | Copyright (C) 2017 |
4 | |
5 | , __ , __ |
6 | /|/ \ /|/ \ |
7 | | __/ _ ,_ | __/ _ ,_ |
8 | | \|/ / | | | | \|/ / | | | |
9 | |(__/|__/ |_/ \_/|/|(__/|__/ |_/ \_/|/ |
10 | /| /| |
11 | \| \| |
12 | |
13 | Enrico Bertolazzi |
14 | Dipartimento di Ingegneria Industriale |
15 | Universita` degli Studi di Trento |
16 | email: enrico.bertolazzi@unitn.it |
17 | |
18\*--------------------------------------------------------------------------*/
19
23
24namespace G2lib {
25
26 /*\
27 | ____ _ _
28 | | _ \ _ _| |__ (_)_ __ ___
29 | | | | | | | | '_ \| | '_ \/ __|
30 | | |_| | |_| | |_) | | | | \__ \
31 | |____/ \__,_|_.__/|_|_| |_|___/
32 \*/
33
44 using DubinsType = enum class DubinsType : integer
45 { LSL, RSR, LSR, RSL, LRL, RLR, DUBINS_ERROR };
46
54
55 bool
57 real_type x0,
58 real_type y0,
59 real_type theta0,
60 real_type x1,
61 real_type y1,
62 real_type theta1,
63 real_type k_max,
64 DubinsType & type,
65 real_type & L1,
66 real_type & L2,
67 real_type & L3,
68 real_type grad[2]
69 );
70
74 class Dubins : public BaseCurve {
75 private:
76 DubinsType m_solution_type{DubinsType::DUBINS_ERROR};
77 real_type m_length{0};
78 real_type m_length_Dalpha{0};
79 real_type m_length_Dbeta{0};
80
81 CircleArc m_C0{"Dubins_C0"};
82 CircleArc m_C1{"Dubins_C1"};
83 CircleArc m_C2{"Dubins_C2"};
84
85 public:
86
90 Dubins() = delete;
91 Dubins( string const & name ) : BaseCurve( name ) {};
92
93 void setup( GenericContainer const & gc ) override;
94
98 Dubins( Dubins const & s ) : BaseCurve( s.name() )
99 { this->copy(s); }
100
113 explicit
115 real_type x0,
116 real_type y0,
117 real_type theta0,
118 real_type x1,
119 real_type y1,
120 real_type theta1,
121 real_type k_max,
122 string const & name
123 ) : BaseCurve( name ) {
124 this->build( x0, y0, theta0, x1, y1, theta1, k_max );
125 }
126
130 void
131 copy( Dubins const & d ) {
132 m_C0 = d.m_C0;
133 m_C1 = d.m_C1;
134 m_C2 = d.m_C2;
135 m_length = d.m_length;
136 m_length_Dalpha = d.m_length_Dalpha;
137 m_length_Dbeta = d.m_length_Dbeta;
138 m_solution_type = d.m_solution_type;
139 }
140
152 bool
153 build(
154 real_type x0,
155 real_type y0,
156 real_type theta0,
157 real_type x1,
158 real_type y1,
159 real_type theta1,
160 real_type k_max
161 );
162
175 integer
177 real_type x0,
178 real_type y0,
179 real_type x1,
180 real_type y1,
181 real_type theta1,
182 real_type k_max,
183 real_type angles[]
184 ) const;
185
198 integer
200 real_type x0,
201 real_type y0,
202 real_type theta0,
203 real_type x1,
204 real_type y1,
205 real_type k_max,
206 real_type angles[]
207 ) const;
208
209 void build( LineSegment const & L );
210 void build( CircleArc const & C );
211 void build( ClothoidCurve const & );
212 void build( Biarc const & );
213 void build( BiarcList const & );
214 void build( PolyLine const & );
215 void build( ClothoidList const & );
216 void build( Dubins const & );
217 void build( Dubins3p const & );
218
219 void
220 bbox(
221 real_type & xmin,
222 real_type & ymin,
223 real_type & xmax,
224 real_type & ymax
225 ) const override;
226
227 void
228 bbox_ISO(
229 real_type offs,
230 real_type & xmin,
231 real_type & ymin,
232 real_type & xmax,
233 real_type & ymax
234 ) const override;
235
239 CircleArc const & C0() const { return m_C0; }
240
244 CircleArc const & C1() const { return m_C1; }
245
249 CircleArc const & C2() const { return m_C2; }
250
251 void
252 get_solution( ClothoidList & CL ) const {
253 CL.init();
254 CL.reserve(3);
255 CL.push_back( m_C0 );
256 CL.push_back( m_C1 );
257 CL.push_back( m_C2 );
258 }
259
260 real_type length() const override { return m_length; }
261 real_type length_Dalpha() const { return m_length_Dalpha; }
262 real_type length_Dbeta() const { return m_length_Dbeta; }
263 real_type length_ISO( real_type offs ) const override;
264
265 void
266 length_grad( real_type grad[2] ) const {
267 grad[0] = m_length_Dalpha;
268 grad[1] = m_length_Dbeta;
269 }
270
271 DubinsType solution_type() const { return m_solution_type; }
272
273 string solution_type_string() const;
274 string solution_type_string_short() const;
275
276 integer icode() const { return to_integer(m_solution_type); }
277
278 real_type length0() const { return m_C0.length(); }
279 real_type length1() const { return m_C1.length(); }
280 real_type length2() const { return m_C2.length(); }
281
282 real_type kappa0() const { return m_C0.kappa_begin(); }
283 real_type kappa1() const { return m_C1.kappa_begin(); }
284 real_type kappa2() const { return m_C2.kappa_begin(); }
285
286 real_type X0( real_type s ) const { return m_C0.X(s); }
287 real_type Y0( real_type s ) const { return m_C0.Y(s); }
288
289 real_type X1( real_type s ) const { return m_C1.X(s); }
290 real_type Y1( real_type s ) const { return m_C1.Y(s); }
291
292 real_type X2( real_type s ) const { return m_C2.X(s); }
293 real_type Y2( real_type s ) const { return m_C2.Y(s); }
294
295 real_type theta0( real_type s ) const { return m_C0.theta(s); }
296 real_type theta1( real_type s ) const { return m_C1.theta(s); }
297 real_type theta2( real_type s ) const { return m_C2.theta(s); }
298
299 real_type theta_begin() const override { return m_C0.theta_begin(); }
300 real_type theta_end() const override { return m_C2.theta_end(); }
301
302 real_type kappa_begin() const override { return m_C0.kappa_begin(); }
303 real_type kappa_end() const override { return m_C2.kappa_end(); }
304
305 real_type x_begin() const override { return m_C0.x_begin(); }
306 real_type x_end() const override { return m_C2.x_end(); }
307
308 real_type y_begin() const override { return m_C0.y_begin(); }
309 real_type y_end() const override { return m_C2.y_end(); }
310
311 real_type tx_begin() const override { return m_C0.tx_begin(); }
312 real_type tx_end() const override { return m_C2.tx_end(); }
313
314 real_type ty_begin() const override { return m_C0.ty_begin(); }
315 real_type ty_end() const override { return m_C2.ty_end(); }
316
317 real_type nx_begin_ISO() const override { return m_C0.nx_begin_ISO(); }
318 real_type nx_end_ISO() const override { return m_C2.nx_end_ISO(); }
319
320 real_type ny_begin_ISO() const override { return m_C0.ny_begin_ISO(); }
321 real_type ny_end_ISO() const override { return m_C2.ny_end_ISO(); }
322
323 real_type theta0_begin() const { return m_C0.theta_begin(); }
324 real_type theta0_end() const { return m_C0.theta_end(); }
325
326 real_type theta1_begin() const { return m_C1.theta_begin(); }
327 real_type theta1_end() const { return m_C1.theta_end(); }
328
329 real_type theta2_begin() const { return m_C2.theta_begin(); }
330 real_type theta2_end() const { return m_C2.theta_end(); }
331
332 real_type x0_begin() const { return m_C0.x_begin(); }
333 real_type x0_end() const { return m_C0.x_end(); }
334
335 real_type y0_begin() const { return m_C0.y_begin(); }
336 real_type y0_end() const { return m_C0.y_end(); }
337
338 real_type x1_begin() const { return m_C1.x_begin(); }
339 real_type x1_end() const { return m_C1.x_end(); }
340
341 real_type y1_begin() const { return m_C1.y_begin(); }
342 real_type y1_end() const { return m_C1.y_end(); }
343
344 real_type x2_begin() const { return m_C2.x_begin(); }
345 real_type x2_end() const { return m_C2.x_end(); }
346
347 real_type y2_begin() const { return m_C2.y_begin(); }
348 real_type y2_end() const { return m_C2.y_end(); }
349
350 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
351
352 real_type theta ( real_type s ) const override;
353 real_type theta_D ( real_type ) const override;
354 real_type theta_DD ( real_type ) const override { return 0; }
355 real_type theta_DDD( real_type ) const override { return 0; }
356
357 real_type X( real_type s ) const override;
358 real_type Y( real_type s ) const override;
359
360 real_type X_D( real_type s ) const override;
361 real_type Y_D( real_type s ) const override;
362
363 real_type X_DD( real_type s ) const override;
364 real_type Y_DD( real_type s ) const override;
365
366 real_type X_DDD( real_type s ) const override;
367 real_type Y_DDD( real_type s ) const override;
368
369 /*\
370 | _ __
371 | | |_ _ __ __ _ _ __ ___ / _| ___ _ __ _ __ ___
372 | | __| '__/ _` | '_ \/ __| |_ / _ \| '__| '_ ` _ \
373 | | |_| | | (_| | | | \__ \ _| (_) | | | | | | | |
374 | \__|_| \__,_|_| |_|___/_| \___/|_| |_| |_| |_|
375 \*/
376
377 void
379 { m_C0.translate(tx,ty); m_C1.translate(tx,ty); m_C2.translate(tx,ty); }
380
381 void
382 rotate( real_type angle, real_type cx, real_type cy ) override
383 { m_C0.rotate(angle,cx,cy); m_C1.rotate(angle,cx,cy); m_C2.rotate(angle,cx,cy); }
384
385 void reverse() override;
386
387 void change_origin( real_type newx0, real_type newy0 ) override;
388
389 void trim( real_type, real_type ) override;
390
391 void scale( real_type s ) override;
392
393 void
394 eval(
395 real_type s,
398 real_type & x,
399 real_type & y
400 ) const;
401
402 void
403 eval(
404 real_type s,
405 real_type & x,
406 real_type & y
407 ) const override;
408
409 void
410 eval_D(
411 real_type s,
412 real_type & x_D,
413 real_type & y_D
414 ) const override;
415
416 void
417 eval_DD(
418 real_type s,
419 real_type & x_DD,
420 real_type & y_DD
421 ) const override;
422
423 void
424 eval_DDD(
425 real_type s,
426 real_type & x_DDD,
427 real_type & y_DDD
428 ) const override;
429
430 void
431 eval_ISO(
432 real_type s,
433 real_type offs,
434 real_type & x,
435 real_type & y
436 ) const override;
437
438 void
440 real_type s,
441 real_type offs,
442 real_type & x_D,
443 real_type & y_D
444 ) const override;
445
446 void
448 real_type s,
449 real_type offs,
450 real_type & x_DD,
451 real_type & y_DD
452 ) const override;
453
454 void
456 real_type s,
457 real_type offs,
458 real_type & x_DDD,
459 real_type & y_DDD
460 ) const override;
461
462 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
463
464 void
466 vector<Triangle2D> & tvec,
467 real_type max_angle = Utils::m_pi/18,
468 real_type max_size = 1e100,
469 integer icurve = 0
470 ) const override {
471 m_C0.bb_triangles( tvec, max_angle, max_size, icurve );
472 m_C1.bb_triangles( tvec, max_angle, max_size, icurve );
473 m_C2.bb_triangles( tvec, max_angle, max_size, icurve );
474 }
475
476 void
478 real_type offs,
479 vector<Triangle2D> & tvec,
480 real_type max_angle = Utils::m_pi/18,
481 real_type max_size = 1e100,
482 integer icurve = 0
483 ) const override {
484 m_C0.bb_triangles_ISO( offs, tvec, max_angle, max_size, icurve );
485 m_C1.bb_triangles_ISO( offs, tvec, max_angle, max_size, icurve );
486 m_C2.bb_triangles_ISO( offs, tvec, max_angle, max_size, icurve );
487 }
488
489 void
491 real_type offs,
492 vector<Triangle2D> & tvec,
493 real_type max_angle = Utils::m_pi/18,
494 real_type max_size = 1e100,
495 integer icurve = 0
496 ) const override {
497 m_C0.bb_triangles_SAE( offs, tvec, max_angle, max_size, icurve );
498 m_C1.bb_triangles_SAE( offs, tvec, max_angle, max_size, icurve );
499 m_C2.bb_triangles_SAE( offs, tvec, max_angle, max_size, icurve );
500 }
501
502 /*\
503 | _ _ ____ _ _
504 | ___| | ___ ___ ___ ___| |_| _ \ ___ (_)_ __ | |_
505 | / __| |/ _ \/ __|/ _ \/ __| __| |_) / _ \| | '_ \| __|
506 | | (__| | (_) \__ \ __/\__ \ |_| __/ (_) | | | | | |_
507 | \___|_|\___/|___/\___||___/\__|_| \___/|_|_| |_|\__|
508 \*/
509
510 integer
512 real_type qx,
513 real_type qy,
514 real_type & x,
515 real_type & y,
516 real_type & s,
517 real_type & t,
518 real_type & dst
519 ) const override;
520
521 integer
523 real_type qx,
524 real_type qy,
525 real_type offs,
526 real_type & x,
527 real_type & y,
528 real_type & s,
529 real_type & t,
530 real_type & dst
531 ) const override;
532
533 /*\
534 | _ _ _ _
535 | ___ ___ | | (_)___(_) ___ _ __
536 | / __/ _ \| | | / __| |/ _ \| '_ \
537 | | (_| (_) | | | \__ \ | (_) | | | |
538 | \___\___/|_|_|_|___/_|\___/|_| |_|
539 \*/
540
544 bool collision( Dubins const & B ) const;
545
553 bool
555 real_type offs,
556 Dubins const & B,
557 real_type offs_B
558 ) const;
559
560 bool collision( BaseCurve const * pC ) const override;
561
562 bool
564 real_type offs,
565 BaseCurve const * pC,
566 real_type offs_C
567 ) const override;
568
569 /*\
570 | _ _ _
571 | (_)_ __ | |_ ___ _ __ ___ ___ ___| |_
572 | | | '_ \| __/ _ \ '__/ __|/ _ \/ __| __|
573 | | | | | | || __/ | \__ \ __/ (__| |_
574 | |_|_| |_|\__\___|_| |___/\___|\___|\__|
575 \*/
576
583 void
584 intersect(
585 Dubins const & B,
586 IntersectList & ilist
587 ) const;
588
597 void
599 real_type offs,
600 Dubins const & B,
601 real_type offs_B,
602 IntersectList & ilist
603 ) const;
604
605 void
606 intersect(
607 BaseCurve const * pC,
608 IntersectList & ilist
609 ) const override;
610
611 void
613 real_type offs,
614 BaseCurve const * pC,
615 real_type offs_LS,
616 IntersectList & ilist
617 ) const override;
618
619 string info() const;
620
621 void
622 info( ostream_type & stream ) const override
623 { stream << this->info(); }
624
625 friend
627 operator << ( ostream_type & stream, Dubins const & bi );
628
629 CurveType type() const override { return CurveType::DUBINS; }
630
631 friend class Dubins3p;
632 };
633
638 inline
639 string
641 string res{""};
642 switch ( n ) {
643 case DubinsType::LSL: res = "LSL"; break;
644 case DubinsType::RSR: res = "RSR"; break;
645 case DubinsType::LSR: res = "LSR"; break;
646 case DubinsType::RSL: res = "RSL"; break;
647 case DubinsType::LRL: res = "LRL"; break;
648 case DubinsType::RLR: res = "RLR"; break;
649 case DubinsType::DUBINS_ERROR: res = "ERROR"; break;
650 }
651 return res;
652 };
653
654}
655
Definition BaseCurve.hxx:192
virtual real_type tx(real_type s) const
real_type kappa(real_type s) const
Definition BaseCurve.hxx:560
virtual real_type ty(real_type s) const
Definition Biarc.hxx:39
Definition BiarcList.hxx:42
Definition Circle.hxx:37
virtual real_type theta_end() const
Definition BaseCurve.hxx:388
virtual real_type ty_end() const
Definition BaseCurve.hxx:478
void bb_triangles_SAE(real_type offs, vector< Triangle2D > &tvec, real_type max_angle=Utils::m_pi/18, real_type max_size=1e100, integer icurve=0) const override
Definition Circle.hxx:455
real_type ny_begin_ISO() const override
Definition Circle.hxx:502
real_type kappa_end() const override
Definition Circle.hxx:496
virtual real_type tx_end() const
Definition BaseCurve.hxx:473
void bb_triangles_ISO(real_type offs, vector< Triangle2D > &tvec, real_type max_angle=Utils::m_pi/18, real_type max_size=1e100, integer icurve=0) const override
Definition Circle.cc:518
real_type X(real_type s) const override
Definition Circle.cc:192
void rotate(real_type angle, real_type cx, real_type cy) override
Definition Circle.cc:368
real_type theta(real_type s) const override
Definition Circle.hxx:506
real_type Y(real_type s) const override
Definition Circle.cc:215
virtual real_type x_end() const
Definition BaseCurve.hxx:413
real_type y_begin() const override
Definition Circle.hxx:498
void translate(real_type tx, real_type ty) override
translate curve by
Definition Circle.hxx:606
virtual real_type nx_end_ISO() const
Definition BaseCurve.hxx:493
virtual real_type y_end() const
Definition BaseCurve.hxx:418
real_type nx_begin_ISO() const override
Definition Circle.hxx:501
real_type length() const override
Definition Circle.hxx:487
void bb_triangles(vector< Triangle2D > &tvec, real_type max_angle=Utils::m_pi/18, real_type max_size=1e100, integer icurve=0) const override
Definition Circle.cc:481
real_type ty_begin() const override
Definition Circle.hxx:500
virtual real_type ny_end_ISO() const
Definition BaseCurve.hxx:498
real_type tx_begin() const override
Definition Circle.hxx:499
real_type x_begin() const override
Definition Circle.hxx:497
real_type kappa_begin() const override
Definition Circle.hxx:495
real_type theta_begin() const override
Definition Circle.hxx:494
Definition Clothoid.hxx:48
Definition ClothoidList.hxx:861
void init()
Definition ClothoidList.cc:286
void push_back(LineSegment const &c)
Definition ClothoidList.cc:319
void reserve(integer n)
Definition ClothoidList.cc:311
Definition Dubins3p.hxx:78
Definition Dubins.hxx:74
real_type ty_begin() const override
Definition Dubins.hxx:314
real_type theta_begin() const override
Definition Dubins.hxx:299
void info(ostream_type &stream) const override
Definition Dubins.hxx:622
integer get_range_angles_end(real_type x0, real_type y0, real_type theta0, real_type x1, real_type y1, real_type k_max, real_type angles[]) const
Definition Dubins.cc:1032
void scale(real_type s) override
Definition Dubins.cc:538
real_type ty_end() const override
Definition Dubins.hxx:315
void rotate(real_type angle, real_type cx, real_type cy) override
Definition Dubins.hxx:382
void intersect_ISO(real_type offs, Dubins const &B, real_type offs_B, IntersectList &ilist) const
Definition Dubins.cc:742
real_type kappa_begin() const override
Definition Dubins.hxx:302
real_type y_begin() const override
Definition Dubins.hxx:308
real_type theta(real_type s) const override
Definition Dubins.cc:397
void trim(real_type, real_type) override
Definition Dubins.cc:554
real_type tx_begin() const override
Definition Dubins.hxx:311
real_type Y(real_type s) const override
Definition Dubins.cc:403
real_type x_end() const override
Definition Dubins.hxx:306
real_type Y_DDD(real_type s) const override
Definition Dubins.cc:406
void bb_triangles(vector< Triangle2D > &tvec, real_type max_angle=Utils::m_pi/18, real_type max_size=1e100, integer icurve=0) const override
Definition Dubins.hxx:465
real_type Y_DD(real_type s) const override
Definition Dubins.cc:405
integer closest_point_ISO(real_type qx, real_type qy, real_type &x, real_type &y, real_type &s, real_type &t, real_type &dst) const override
Definition Dubins.cc:801
bool build(real_type x0, real_type y0, real_type theta0, real_type x1, real_type y1, real_type theta1, real_type k_max)
Definition Dubins.cc:336
Dubins(real_type x0, real_type y0, real_type theta0, real_type x1, real_type y1, real_type theta1, real_type k_max, string const &name)
Definition Dubins.hxx:114
CircleArc const & C1() const
Definition Dubins.hxx:244
real_type length_ISO(real_type offs) const override
Definition Dubins.cc:384
real_type y_end() const override
Definition Dubins.hxx:309
CircleArc const & C0() const
Definition Dubins.hxx:239
void bbox(real_type &xmin, real_type &ymin, real_type &xmax, real_type &ymax) const override
Definition Dubins.cc:561
real_type Y_D(real_type s) const override
Definition Dubins.cc:404
real_type X_DDD(real_type s) const override
Definition Dubins.cc:402
void eval_DD(real_type s, real_type &x_DD, real_type &y_DD) const override
Definition Dubins.cc:459
void intersect(Dubins const &B, IntersectList &ilist) const
Definition Dubins.cc:686
friend ostream_type & operator<<(ostream_type &stream, Dubins const &bi)
Definition Dubins.cc:1142
integer get_range_angles_begin(real_type x0, real_type y0, real_type x1, real_type y1, real_type theta1, real_type k_max, real_type angles[]) const
Definition Dubins.cc:930
Dubins(Dubins const &s)
Definition Dubins.hxx:98
void translate(real_type tx, real_type ty) override
translate curve by
Definition Dubins.hxx:378
Dubins()=delete
Three arc solution of DUBINS problem.
real_type length() const override
Definition Dubins.hxx:260
real_type X_DD(real_type s) const override
Definition Dubins.cc:401
void bb_triangles_SAE(real_type offs, vector< Triangle2D > &tvec, real_type max_angle=Utils::m_pi/18, real_type max_size=1e100, integer icurve=0) const override
Definition Dubins.hxx:490
real_type tx_end() const override
Definition Dubins.hxx:312
real_type kappa_end() const override
Definition Dubins.hxx:303
real_type theta_DD(real_type) const override
Definition Dubins.hxx:354
real_type theta_DDD(real_type) const override
Definition Dubins.hxx:355
real_type x_begin() const override
Definition Dubins.hxx:305
void eval_DDD(real_type s, real_type &x_DDD, real_type &y_DDD) const override
Definition Dubins.cc:470
void eval_ISO_DD(real_type s, real_type offs, real_type &x_DD, real_type &y_DD) const override
Definition Dubins.cc:506
real_type X_D(real_type s) const override
Definition Dubins.cc:400
real_type nx_begin_ISO() const override
Definition Dubins.hxx:317
bool collision_ISO(real_type offs, Dubins const &B, real_type offs_B) const
Definition Dubins.cc:629
void eval_ISO_DDD(real_type s, real_type offs, real_type &x_DDD, real_type &y_DDD) const override
Definition Dubins.cc:518
void eval_ISO_D(real_type s, real_type offs, real_type &x_D, real_type &y_D) const override
Definition Dubins.cc:494
real_type theta_D(real_type) const override
Definition Dubins.cc:398
void bb_triangles_ISO(real_type offs, vector< Triangle2D > &tvec, real_type max_angle=Utils::m_pi/18, real_type max_size=1e100, integer icurve=0) const override
Definition Dubins.hxx:477
void eval_ISO(real_type s, real_type offs, real_type &x, real_type &y) const override
Definition Dubins.cc:482
CurveType type() const override
Definition Dubins.hxx:629
real_type X(real_type s) const override
Definition Dubins.cc:399
real_type theta_end() const override
Definition Dubins.hxx:300
real_type ny_begin_ISO() const override
Definition Dubins.hxx:320
bool collision(Dubins const &B) const
Definition Dubins.cc:614
void change_origin(real_type newx0, real_type newy0) override
Definition Dubins.cc:545
real_type nx_end_ISO() const override
Definition Dubins.hxx:318
void reverse() override
Definition Dubins.cc:528
void copy(Dubins const &d)
Definition Dubins.hxx:131
void bbox_ISO(real_type offs, real_type &xmin, real_type &ymin, real_type &xmax, real_type &ymax) const override
Definition Dubins.cc:584
CircleArc const & C2() const
Definition Dubins.hxx:249
void eval_D(real_type s, real_type &x_D, real_type &y_D) const override
Definition Dubins.cc:448
real_type ny_end_ISO() const override
Definition Dubins.hxx:321
Definition Line.hxx:37
Class to manage a collection of straight segment.
Definition PolyLine.hxx:42
Definition BBox.cc:42
GC_namespace::GenericContainer GenericContainer
Generic container object.
Definition Clothoids.hh:84
bool Dubins_build(real_type x0, real_type y0, real_type theta0, real_type x1, real_type y1, real_type theta1, real_type k_max, DubinsType &type, real_type &L1, real_type &L2, real_type &L3, real_type grad[2])
Definition Dubins.cc:136
string to_string(CurveType n)
Definition Clothoids.hh:106
std::basic_ostream< char > ostream_type
output streaming
Definition Clothoids.hh:78
std::vector< Ipair > IntersectList
Vector of pair of two real number.
Definition BaseCurve.hxx:36
integer to_integer(DubinsType d)
Definition Dubins.cc:58
enum class DubinsType :integer { LSL, RSR, LSR, RSL, LRL, RLR, DUBINS_ERROR } DubinsType
Definition Dubins.hxx:44
enum class CurveType :integer { LINE, POLYLINE, CIRCLE, BIARC, BIARC_LIST, CLOTHOID, CLOTHOID_LIST, DUBINS, DUBINS3P } CurveType
Definition Clothoids.hh:89
double real_type
real type number
Definition Clothoids.hh:79
int integer
integer type number
Definition Clothoids.hh:80