6 WVTEST_MAIN("bcar basic geometry")
21 WVPASSEQ_DOUBLE(bc.l(), bc.df() + bc.dr(), 0.00001);
22 WVPASSEQ_DOUBLE(0.5, bc.lfx(), 0.00001);
23 WVPASSEQ_DOUBLE(0.5, bc.lrx(), 0.00001);
24 WVPASSEQ_DOUBLE(1.5, bc.rrx(), 0.00001);
25 WVPASSEQ_DOUBLE(1.5, bc.rfx(), 0.00001);
26 WVPASSEQ_DOUBLE(3.5, bc.lfy(), 0.00001);
27 WVPASSEQ_DOUBLE(0.5, bc.lry(), 0.00001);
28 WVPASSEQ_DOUBLE(0.5, bc.rry(), 0.00001);
29 WVPASSEQ_DOUBLE(3.5, bc.rfy(), 0.00001);
30 WVPASSEQ_DOUBLE(0.5, bc.ralx(), 0.00001);
31 WVPASSEQ_DOUBLE(1.5, bc.rarx(), 0.00001);
32 WVPASSEQ_DOUBLE(1, bc.raly(), 0.00001);
33 WVPASSEQ_DOUBLE(1, bc.rary(), 0.00001);
35 // min. turning radius circle centers
36 WVPASSEQ_DOUBLE(bc.h(), bc.ccl().h(), 0.00001);
37 WVPASSEQ_DOUBLE(M_PI / 2, bc.ccl().h(), 0.00001);
38 WVPASSEQ_DOUBLE(-9, bc.ccl().x(), 0.00001);
39 WVPASSEQ_DOUBLE(1, bc.ccl().y(), 0.00001);
40 WVPASSEQ_DOUBLE(bc.h(), bc.ccr().h(), 0.00001);
41 WVPASSEQ_DOUBLE(M_PI / 2, bc.ccr().h(), 0.00001);
42 WVPASSEQ_DOUBLE(11, bc.ccr().x(), 0.00001);
43 WVPASSEQ_DOUBLE(1, bc.ccr().y(), 0.00001);
45 // car radiuses (inner radius, outer front radius, outer rear radius)
47 WVPASSEQ_DOUBLE(bc.iradi(), 9.5, 0.00001);
48 WVPASSEQ_DOUBLE(bc.ofradi(), 10.793516572461451, 0.00001);
49 WVPASSEQ_DOUBLE(bc.orradi(), 10.51189802081432, 0.00001);
53 WVPASS(!bc.drivable(bc.ccl()));
54 WVPASS(!bc.drivable(bc.ccr()));
66 WVPASS(bc.drivable(bc2));
68 WVPASS(bc.drivable(bc2));
74 WVPASSEQ_DOUBLE(1, bc.x(), 0.00001);
75 WVPASSEQ_DOUBLE(2, bc.y(), 0.00001);
77 bc.set_max_steer();//bc.st(M_PI);
79 WVPASSEQ_DOUBLE(0.2, bc.st(), 0.01);
82 WVPASSEQ_DOUBLE(-0.2, bc.st(), 0.01);
88 bc.rotate(-1, 1, M_PI);
89 WVPASSEQ_DOUBLE(-1, bc.x(), 0.00001);
90 WVPASSEQ_DOUBLE(1, bc.y(), 0.00001);
91 WVPASSEQ_DOUBLE(M_PI, bc.h(), 0.00001);
92 bc.rotate(0, 1, -M_PI / 2);
93 WVPASSEQ_DOUBLE(0, bc.x(), 0.00001);
94 WVPASSEQ_DOUBLE(2, bc.y(), 0.00001);
95 WVPASSEQ_DOUBLE(M_PI / 2, bc.h(), 0.00001);
98 WVTEST_MAIN("test collide functions")
100 std::vector<std::tuple<double, double>> p1;
101 p1.push_back(std::make_tuple(1, 1));
102 p1.push_back(std::make_tuple(1, 3));
103 p1.push_back(std::make_tuple(3, 3));
104 p1.push_back(std::make_tuple(3, 1));
105 WVPASS(inside(2, 2, p1));
106 WVPASS(!inside(4, 4, p1));
107 auto tmpi1 = intersect(1, 1, 3, 3, 1, 3, 3, 1);
108 WVPASS(std::get<0>(tmpi1));
109 WVPASSEQ_DOUBLE(std::get<1>(tmpi1), 2, 0.00001);
110 WVPASSEQ_DOUBLE(std::get<2>(tmpi1), 2, 0.00001);
111 auto tmpi2 = intersect(1, 1, 1, 3, 3, 1, 3, 3);
112 WVPASS(!std::get<0>(tmpi2));
113 std::vector<std::tuple<double, double>> p2;
114 p2.push_back(std::make_tuple(2.5, 1));
115 p2.push_back(std::make_tuple(3.5, 3));
116 p2.push_back(std::make_tuple(2, 4));
117 p2.push_back(std::make_tuple(1, 2));
118 auto col1 = collide(p1, p2);
119 WVPASS(std::get<0>(col1));
120 WVPASSEQ(std::get<1>(col1), 0); // first segment (indexing from 0)
121 WVPASSEQ(std::get<2>(col1), 2); // the last segment
122 std::vector<std::tuple<double, double>> p3;
123 p3.push_back(std::make_tuple(2, 2));
124 p3.push_back(std::make_tuple(2, 0));
125 p3.push_back(std::make_tuple(4, 0));
126 p3.push_back(std::make_tuple(4, 2));
127 WVPASS(!std::get<0>(collide(p1, p3)));