Locus No Pilotus
Project of four first grade MIPT DAFE/RSE students (for engineering practical work in the second semester) in Qt C++
Loading...
Searching...
No Matches
trajectory.h
Go to the documentation of this file.
1#pragma once
2
3// our code libs:
4#include "lib/_objects.h"
7
8namespace math {
9
11 public:
12 /**
13 * @brief Инициализирует экземпляр класса TrajectoryCalculator
14 * @param targets: контрольные точки
15 * @param lines: запрещённые перелеты
16 * @param circles: круговые препятствия
17 * @param hills: многоугольные препятствия
18 */
19 TrajectoryCalculator(const std::vector<lib::Target>& targets,
20 const std::vector<lib::TrappyLine>& lines,
21 const std::vector<lib::TrappyCircle>& circles,
22 const std::vector<lib::Hill>& hills,
23 unsigned short num_of_flyers)
24 : number_of_flyers_{num_of_flyers} {
25 for (auto& target : targets) targets_.push_back(Point(target.GetPoint()));
26
27 for (auto& line : lines) {
28 std::pair<std::size_t, std::size_t> indexes;
29 std::pair<lib::Target, lib::Target> points = line.GetTargets();
30 for (std::size_t i = 0; i < targets.size(); ++i)
31 if (targets[i] == points.first)
32 indexes.first = i;
33 else if (targets[i] == points.second)
34 indexes.second = i;
35 forbidden_lines_.push_back(indexes);
36 }
37
38 for (auto& circle : circles)
39 circles_.push_back(
40 CircleObstacle(Point(circle.GetCenter()), circle.GetRadius()));
41
42 for (auto& hill : hills) {
43 std::vector<Point> vertexes;
44 for (auto& vertex : hill.GetVertices()) vertexes.push_back(Point(vertex));
45 polys_.push_back(PolygonObstacle(vertexes));
46 }
47
49 }
50
51 /// @brief Возвращает траекторию
52 std::vector<lib::Segment> GetTrajectory() { return trajectory_; }
53
54 private:
55 // Количество роботов
56 unsigned short number_of_flyers_;
57
58 // Контрольные точки
59 std::vector<Point> targets_;
60
61 // Запрещенные перелёты
62 std::vector<std::pair<std::size_t, std::size_t>> forbidden_lines_;
63
64 // Круговые препятствия
65 std::vector<CircleObstacle> circles_;
66
67 // Многоугольные препятствия
68 std::vector<PolygonObstacle> polys_;
69
70 // Траектория облета контрольных точек
71 std::vector<lib::Segment> trajectory_;
72
73 /**
74 * @brief Подсчет части траектории
75 * @param optimal_way: порядок обхода точек
76 * @param nodes: вершины графа
77 * @return часть траектории
78 */
79 std::vector<lib::Segment> GetTrajectoryPart(
80 std::vector<std::size_t> optimal_way,
81 const std::vector<std::shared_ptr<PathWayNode>>& nodes);
82
83 /// @brief Рассчитывает траекторию
85};
86
87} // namespace math
Круговое препятствие
Definition obstacles.h:58
Многоугольное препятствие
Definition obstacles.h:100
Definition trajectory.h:10
std::vector< CircleObstacle > circles_
Definition trajectory.h:65
std::vector< std::pair< std::size_t, std::size_t > > forbidden_lines_
Definition trajectory.h:62
std::vector< lib::Segment > GetTrajectoryPart(std::vector< std::size_t > optimal_way, const std::vector< std::shared_ptr< PathWayNode > > &nodes)
Подсчет части траектории
TrajectoryCalculator(const std::vector< lib::Target > &targets, const std::vector< lib::TrappyLine > &lines, const std::vector< lib::TrappyCircle > &circles, const std::vector< lib::Hill > &hills, unsigned short num_of_flyers)
Инициализирует экземпляр класса TrajectoryCalculator.
Definition trajectory.h:19
std::vector< lib::Segment > GetTrajectory()
Возвращает траекторию
Definition trajectory.h:52
std::vector< PolygonObstacle > polys_
Definition trajectory.h:68
void CalculateTrajectory()
Рассчитывает траекторию
Definition trajectory.cpp:12
std::vector< Point > targets_
Definition trajectory.h:59
unsigned short number_of_flyers_
Definition trajectory.h:56
std::vector< lib::Segment > trajectory_
Definition trajectory.h:71
Этот файл включает в себя все lib objects.
Definition adjacency_matrix.cpp:7
Точка с геометрическими связями
Definition obstacles.h:46