RRTNode* _p = nullptr;
unsigned int _cusp_cnt = 0;
int _segment_type = 0; // 0 ~ straight, 1 ~ left, -1 right
+ bool _p_is_cusp = false;
public:
/*! Get cost to parent. */
double c() const;
RRTNode* p() const;
/*! Set parent node. */
+ void p(RRTNode& p, bool connecting_goal);
void p(RRTNode& p);
- /*! Get number of backward-forward direction changes. */
+ /*! Get number of backward-forward direction changes.
+ *
+ * The parent node may be cusp to this node, i.e. parent may have sp ==
+ * 0 or sgn(sp) differs from sgn(this->sp). In such a situation, the
+ * number of this->cusp_cnt is incremented by one.
+ */
unsigned int cusp_cnt() const;
/*! Set number of backward-forward direction changes. */
/*! Set Reeds & Shepp segment type. */
void st(int st);
+ /*! Return true if the parent is cusp node and false otherwise. */
+ bool p_is_cusp(void) const;
+
+ /*! Set if the parent node is cusp (direction changed from parent). */
+ void p_is_cusp(bool isit);
+
+ /*! Return true if p would be cusp if set as parent of this. */
+ bool would_be_cusp_if_parent(RRTNode const& p) const;
+
bool operator==(RRTNode const& n);
};