82 : sl_boundary_(sl_boundary), id_(id), obstacle_type_(type) {
83 int min_s_index = -1;
84 int max_s_index = -1;
85 int min_l_index = -1;
86 int max_l_index = -1;
87 double min_s = std::numeric_limits<double>::max();
88 double min_l = std::numeric_limits<double>::max();
89 double max_s = std::numeric_limits<double>::lowest();
90 double max_l = std::numeric_limits<double>::lowest();
91 for (int i = 0; i < sl_boundary.boundary_point_size(); i++) {
92 const auto& sl_point = sl_boundary.boundary_point(i);
93 if (sl_point.s() < min_s) {
94 min_s = sl_point.s();
95 min_s_index = i;
96 }
97 if (sl_point.s() > max_s) {
98 max_s = sl_point.s();
99 max_s_index = i;
100 }
101 if (sl_point.l() < min_l) {
102 min_l = sl_point.l();
103 min_l_index = i;
104 }
105 if (sl_point.l() > max_l) {
106 max_l = sl_point.l();
107 max_l_index = i;
108 }
109 }
110 min_s_point_ = sl_boundary.boundary_point(min_s_index);
111 min_l_point_ = sl_boundary.boundary_point(min_l_index);
112 max_s_point_ = sl_boundary.boundary_point(max_s_index);
113 max_l_point_ = sl_boundary.boundary_point(max_l_index);
114
115
116
117
118 int t = min_s_index;
119 SLPoint sl_point;
120 while (t != max_s_index) {
121 sl_point.set_s(sl_boundary.boundary_point(t).s());
122 sl_point.set_l(sl_boundary.boundary_point(t).l());
123 right_boundary_.push_back(sl_point);
124 t = (t + 1) % sl_boundary.boundary_point_size();
125 }
126 sl_point.set_s(sl_boundary.boundary_point(t).s());
127 sl_point.set_l(sl_boundary.boundary_point(t).l());
128 right_boundary_.push_back(sl_point);
129 if (right_boundary_.front().s() > right_boundary_.back().s()) {
130 std::reverse(right_boundary_.begin(), right_boundary_.end());
131 }
132
133 t = max_s_index;
134 while (t != min_s_index) {
135 sl_point.set_s(sl_boundary.boundary_point(t).s());
136 sl_point.set_l(sl_boundary.boundary_point(t).l());
137 left_boundary_.push_back(sl_point);
138 t = (t + 1) % sl_boundary.boundary_point_size();
139 }
140 sl_point.set_s(sl_boundary.boundary_point(t).s());
141 sl_point.set_l(sl_boundary.boundary_point(t).l());
142 left_boundary_.push_back(sl_point);
143 if (left_boundary_.front().s() > left_boundary_.back().s()) {
144 std::reverse(left_boundary_.begin(), left_boundary_.end());
145 }
146 double mid_s = (sl_boundary.boundary_point(min_s_index).s() +
147 sl_boundary.boundary_point(max_s_index).s()) /
148 2.0;
149
152 std::swap(left_boundary_, right_boundary_);
153 }
154
155 if (print_log) {
156 PrintCurves print_curve;
157 for (auto pt : right_boundary_) {
158 print_curve.AddPoint("right_boundary", pt.s(), pt.l());
159 }
160 for (auto pt : left_boundary_) {
161 print_curve.AddPoint("left_boundary", pt.s(), pt.l());
162 }
163 print_curve.PrintToLog();
164 }
165}
static double GetInterpolatedLFromBoundary(const std::vector< SLPoint > &boundary, const double s)