]> rtime.felk.cvut.cz Git - hubacji1/iamcar.git/commitdiff
Add move method to rotate new node
authorJiri Vlasak <hubacji1@fel.cvut.cz>
Mon, 25 Feb 2019 14:24:12 +0000 (15:24 +0100)
committerJiri Vlasak <hubacji1@fel.cvut.cz>
Tue, 26 Feb 2019 09:19:53 +0000 (10:19 +0100)
incl/bcar.h
vehicle_platform/bcar.cc

index 408736e938dd65d37d99d25fe46fd81ba61f4cb8..c79466e1c8f8c692b1b1820c5a7f29aabfd78516 100644 (file)
@@ -79,6 +79,8 @@ class BicycleCar: public RRTNode {
                 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
index bb34e4ceb201ce7d9e0acfddf5be1277b88b2dcd..41a8f569952fbc6ab28b25a3f7e5b906b9806c1f 100644 (file)
@@ -244,3 +244,20 @@ bool BicycleCar::drivable(RRTNode *n)
                 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);
+}