MCPcopy Create free account
hub / github.com/OpenDriveLab/OpenLane / cal_fun

Method cal_fun

eval/LANE_evaluation/lane2d/src/spline.cpp:125–200  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

123}
124
125vector<Func> Spline::cal_fun(const vector<Point2f> &point_v)
126{
127 vector<Func> func_v;
128 int n = point_v.size();
129 if(n<=2) {
130 cout << "in cal_fun: point number less than 3" << endl;
131 return func_v;
132 }
133
134 func_v.resize(point_v.size()-1);
135
136 vector<double> Mx(n);
137 vector<double> My(n);
138 vector<double> A(n-2);
139 vector<double> B(n-2);
140 vector<double> C(n-2);
141 vector<double> Dx(n-2);
142 vector<double> Dy(n-2);
143 vector<double> h(n-1);
144 //vector<func> func_v(n-1);
145
146 for(int i = 0; i < n-1; i++)
147 {
148 h[i] = sqrt(pow(point_v[i+1].x - point_v[i].x, 2) + pow(point_v[i+1].y - point_v[i].y, 2));
149 }
150
151 for(int i = 0; i < n-2; i++)
152 {
153 A[i] = h[i];
154 B[i] = 2*(h[i]+h[i+1]);
155 C[i] = h[i+1];
156
157 Dx[i] = 6*( (point_v[i+2].x - point_v[i+1].x)/h[i+1] - (point_v[i+1].x - point_v[i].x)/h[i] );
158 Dy[i] = 6*( (point_v[i+2].y - point_v[i+1].y)/h[i+1] - (point_v[i+1].y - point_v[i].y)/h[i] );
159 }
160
161 //TDMA
162 C[0] = C[0] / B[0];
163 Dx[0] = Dx[0] / B[0];
164 Dy[0] = Dy[0] / B[0];
165 for(int i = 1; i < n-2; i++)
166 {
167 double tmp = B[i] - A[i]*C[i-1];
168 C[i] = C[i] / tmp;
169 Dx[i] = (Dx[i] - A[i]*Dx[i-1]) / tmp;
170 Dy[i] = (Dy[i] - A[i]*Dy[i-1]) / tmp;
171 }
172 Mx[n-2] = Dx[n-3];
173 My[n-2] = Dy[n-3];
174 for(int i = n-4; i >= 0; i--)
175 {
176 Mx[i+1] = Dx[i] - C[i]*Mx[i+2];
177 My[i+1] = Dy[i] - C[i]*My[i+2];
178 }
179
180 Mx[0] = 0;
181 Mx[n-1] = 0;
182 My[0] = 0;

Callers 2

splineInterpTimesMethod · 0.95
splineInterpStepMethod · 0.95

Calls 1

resizeMethod · 0.80

Tested by

no test coverage detected