## Unreleased
### Added
- Rotation of BicycleCar around the point.
+- Circle-line intersection.
### Changed
- When set up BicycleCar heading, set the interval to `[-pi, +pi]`.
double x1, double y1,
double x2, double y2
) {
- return std::make_tuple(false, 0, 0, 0, 0);
+ x2 -= cx;
+ x1 -= cx;
+ y2 -= cy;
+ y1 -= cy;
+ double dx = x2 - x1;
+ double dy = y2 - y1;
+ double dr = sqrt(dx*dx + dy*dy);
+ double D = x1*y2 - x2*y1;
+ if (r*r * dr*dr - D*D < 0)
+ return std::make_tuple(false, 0, 0, 0, 0);
+ // intersection coordinates
+ double ix1 = (D*dy + sgn(dy)*dx*sqrt(r*r * dr*dr - D*D)) / (dr*dr);
+ double ix2 = (D*dy - sgn(dy)*dx*sqrt(r*r * dr*dr - D*D)) / (dr*dr);
+ double iy1 = (-D*dx + std::abs(dy) * sqrt(r*r * dr*dr - D*D)) / (dr*dr);
+ double iy2 = (-D*dx - std::abs(dy) * sqrt(r*r * dr*dr - D*D)) / (dr*dr);
+ return std::make_tuple(true, ix1, iy1, ix2, iy2);
}