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