2 * SPDX-FileCopyrightText: 2021 Jiri Vlasak <jiri.vlasak.2@cvut.cz>
4 * SPDX-License-Identifier: GPL-3.0-only
9 #define CUTE_C2_IMPLEMENTATION
15 RRTExt2::collide(RRTNode const& n)
17 this->c2x_bc_.p.x = n.x();
18 this->c2x_bc_.p.y = n.y();
19 this->c2x_bc_.r.c = cos(n.h());
20 this->c2x_bc_.r.s = sin(n.h());
21 for (auto& o: this->c2_obstacles_) {
22 if (c2PolytoPoly(&this->c2_bc_, &this->c2x_bc_, &o, NULL)) {
30 RRTExt2::collide_steered()
33 for (auto& n: this->_steered) {
34 if (this->collide(n)) {
39 this->_steered.erase(this->_steered.begin() + i, this->_steered.end());
40 // The first node of this->_steered is the same as nn. Therefore, if
41 // there is only one node left, it is nn, and other nodes collide.
42 return this->_steered.size() == 1;
45 RRTExt2::RRTExt2() : RRTS()
47 this->c2_bc_.count = 4;
48 this->c2_bc_.verts[0].x = this->_bc.lfx();
49 this->c2_bc_.verts[0].y = this->_bc.lfy();
50 this->c2_bc_.verts[1].x = this->_bc.lrx();
51 this->c2_bc_.verts[1].y = this->_bc.lry();
52 this->c2_bc_.verts[2].x = this->_bc.rrx();
53 this->c2_bc_.verts[2].y = this->_bc.rry();
54 this->c2_bc_.verts[3].x = this->_bc.rfx();
55 this->c2_bc_.verts[3].y = this->_bc.rfy();
62 this->c2_bc_.count = 4;
63 this->c2_bc_.verts[0].x = this->_bc.lfx();
64 this->c2_bc_.verts[0].y = this->_bc.lfy();
65 this->c2_bc_.verts[1].x = this->_bc.lrx();
66 this->c2_bc_.verts[1].y = this->_bc.lry();
67 this->c2_bc_.verts[2].x = this->_bc.rrx();
68 this->c2_bc_.verts[2].y = this->_bc.rry();
69 this->c2_bc_.verts[3].x = this->_bc.rfx();
70 this->c2_bc_.verts[3].y = this->_bc.rfy();
74 RRTExt2::json(Json::Value jvi)
77 assert(jvi["obst"] != Json::nullValue);
78 for (auto& o: jvi["obst"]) {
79 assert(o.size() < C2_MAX_POLYGON_VERTS);
81 c2tmp.count = o.size();
84 c2tmp.verts[i].x = c[0].asDouble();
85 c2tmp.verts[i].y = c[1].asDouble();
88 this->c2_obstacles_.push_back(c2tmp);