| 2281 | } |
| 2282 | |
| 2283 | void ODRoad::roadEleControlPoint(std::vector<std::vector<double>>& ele, double length, std::string mapversion) { |
| 2284 | ele.clear(); |
| 2285 | double _a = 0; |
| 2286 | double _b = 0; |
| 2287 | double _c = 0; |
| 2288 | double _d = 0; |
| 2289 | double _s = 0; |
| 2290 | int index = 0; |
| 2291 | for (auto it : elevation) { |
| 2292 | it.getParam(_a, _b, _c, _d, _s); |
| 2293 | double elelength = 0; |
| 2294 | if (index == elevation.size() - 1) { |
| 2295 | elelength = length - it.offset(); |
| 2296 | } else { |
| 2297 | elelength = elevation.at(index + 1).offset() - _s; |
| 2298 | } |
| 2299 | if ((std::abs(_c) < 1e-6 && std::abs(_d) < 1e-6) || mapversion == "tadsim v2.0") { |
| 2300 | std::vector<double> tmp; |
| 2301 | tmp.push_back(_s); |
| 2302 | tmp.push_back(it.value(0)); |
| 2303 | tmp.push_back(it.slope(0)); |
| 2304 | ele.push_back(tmp); |
| 2305 | } else { |
| 2306 | for (int i = 0; i < 4; i++) { |
| 2307 | double percent = static_cast<double>(i) / 5.0 * elelength; |
| 2308 | std::vector<double> tmp; |
| 2309 | tmp.push_back(percent + _s); |
| 2310 | tmp.push_back(it.value(percent)); |
| 2311 | tmp.push_back(it.slope(percent)); |
| 2312 | ele.push_back(tmp); |
| 2313 | } |
| 2314 | } |
| 2315 | if (index == elevation.size() - 1) { |
| 2316 | std::vector<double> tmp; |
| 2317 | tmp.push_back(length); |
| 2318 | tmp.push_back(it.value(elelength)); |
| 2319 | tmp.push_back(it.slope(elelength)); |
| 2320 | ele.push_back(tmp); |
| 2321 | } |
| 2322 | index++; |
| 2323 | } |
| 2324 | } |
| 2325 | |
| 2326 | void ODRoad::roadSlope(std::vector<double>& startx, std::vector<double>& length, std::vector<double>& slope) { |
| 2327 | for (size_t i = 0; i < elevation.size(); i++) { |