float alfa();
/** Return true if `n` not inside of `ccl`, `ccr` */
bool drivable(RRTNode *n);
+ /** Return node rotated by `dh` around `c` */
+ BicycleCar *move(RRTNode *c, float dh);
};
#endif
drivable = false;
return drivable;
}
+
+BicycleCar *BicycleCar::move(RRTNode *c, float dh)
+{
+ float zx = c->x();
+ float zy = c->y();
+ float px = this->x();
+ float py = this->y();
+ px -= zx;
+ py -= zy;
+ float nx = px * cos(dh) - py * sin(dh);
+ float ny = px * sin(dh) + py * cos(dh);
+ px = nx + zx;
+ py = ny + zy;
+ float ph = this->h();
+ ph += dh;
+ return new BicycleCar(px, py, ph);
+}