68 double x = (c1.
xc + c2.
xc) / 2;
69 double y = (c1.
yc + c2.
yc) / 2;
99 TT_tangent_circles(c1, c2, q);
134 return TiST_exists(c1, c2) || TeST_exists(c1, c2);
185 double theta = atan2(c2.
yc - c1.
yc, c2.
xc - c1.
xc);
219 TiST_tangent_circles(c1, c2, q1, q2);
225 TeST_tangent_circles(c1, c2, q1, q2);
231 if (TiST_exists(c1, c2))
233 return TiST_path(c1, c2, q1, q2);
235 if (TeST_exists(c1, c2))
237 return TeST_path(c1, c2, q1, q2);
239 return numeric_limits<double>::max();
259 double theta =
angle;
262 double delta_y = sqrt(pow(r, 2) - pow(delta_x, 2));
270 TT_tangent_circles(c1, tgt1, q1);
271 TT_tangent_circles(tgt1, c2, q2);
272 TT_tangent_circles(c1, tgt2, q3);
273 TT_tangent_circles(tgt2, c2, q4);
280 TTT_tangent_circles(c1, c2, &qa, &qb, &qc, &qd);
288 if (length1 < length2)
308 return numeric_limits<double>::max();
314 CC00_Dubins_State_Space::CC00_Dubins_State_Space(
double kappa,
double sigma,
double discretization,
bool forwards)
316 , forwards_(forwards)
317 , cc00_dubins_{ unique_ptr<CC00_Dubins>(
new CC00_Dubins(
this)) }
397 nullptr, cstart[best_path], cend[best_path], ci1[best_path],
nullptr,
length[best_path]);
440 double lg[] = { numeric_limits<double>::max(), numeric_limits<double>::max(), numeric_limits<double>::max(),
441 numeric_limits<double>::max() };
443 for (
int i = 0; i < 2; i++)
445 for (
int j = 0; j < 2; j++)
450 lg[2 * i + j] =
path[2 * i + j]->length;
473 for (
int i = 0; i < 2; i++)
475 delete start_circle[i];
476 delete end_circle[i];
478 for (
int i = 0; i < 4; i++)
485 return path[best_path];
498 vector<Control> cc_dubins_controls;
499 cc_dubins_controls.reserve(9);
531 return cc_dubins_controls;