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
optimal_way.h
Go to the documentation of this file.
1#pragma once
2
3// std libs:
4#include <set>
5
6// our code libs:
7#include "lib/segment.h"
8#include "path_graph.h"
9
10namespace math {
11
12/// @brief Функтор, находящий кратчайший путь между точками
14 public:
15 /**
16 * @brief Находит кратчайший путь между точками
17 * @param circles: круговые препятствия
18 * @param polys: многоугольные препятствия
19 */
20 OptimalWayCalculator(const std::vector<CircleObstacle>& circles,
21 const std::vector<PolygonObstacle>& polys)
22 : circles_{circles}, polys_{polys} {
25 }
26
27 std::vector<std::shared_ptr<PathWayNode>> GetGraphNodes() {
28 return graph_.nodes;
29 }
30
31 std::vector<std::size_t> GetOptimalWay() { return optimal_way_; }
32
34
35 std::vector<lib::Segment> GetTrajectoryPart() { return trajectory_part_; }
36
37 // Находит оптимальный маршрут
38 void FindOptimalWay(Point p1, Point p2);
39
40 private:
41 std::vector<CircleObstacle> circles_;
42
43 std::vector<PolygonObstacle> polys_;
44
45 // Граф для алгоритма Дейкстры
47
48 // Оптимальный путь
49 std::vector<std::size_t> optimal_way_;
50
51 // Длина оптимального пути
53
54 // Часть траектории
55 std::vector<lib::Segment> trajectory_part_;
56
57 /**
58 * @brief Проверяет, пересекает ли общая касательная двух препятствий другое
59 * препятствие
60 * @param tangent: общая касательная
61 * @param obstacle1: номер препятствие 1
62 * @param obstacle2: номер препятствие 2
63 * @return bool: результат проверки
64 */
65 template <typename T, typename U>
67 T& obstacle1, U& obstacle2);
68
69 /**
70 * @brief Проверяет, пересекает ли касательная препятствие
71 * @param tangent_point: точка касания
72 * @param control_point: контрольная точка
73 * @return результат проверки
74 */
75 bool TangentGoesThroughOtherObstacle(const Point& tangent_point,
76 const Point& control_point);
77
78 /**
79 * @brief Добавляет информацию об общей касательной двух препятствий
80 * @param tangent: общая касательная
81 * @param obstacle1: препятствие 1
82 * @param obstacle2: препятствие 2
83 */
84 template <typename T, typename U>
85 void AddTangent(const LinearFunction& tangent, T& obstacle1, U& obstacle2);
86
87 // Добавляет информацию о всех общих касательных всех препятствий
88 void AddCommonTangents();
89
90 // Добавляет в граф точки касания
92
93 // Добавляет в граф контрольные точки
94 std::set<std::size_t> AddGraphControlPoints(Point point);
95
96 // Создать часть траектории
97 void MakeTrajectoryPart();
98
99 // Удаляет информацию от предыдущих точек
100 void ResetInformation();
101};
102
103} // namespace math
Функтор, находящий кратчайший путь между точками
Definition optimal_way.h:13
void MakeTrajectoryPart()
Definition optimal_way.cpp:233
std::vector< std::shared_ptr< PathWayNode > > GetGraphNodes()
Definition optimal_way.h:27
std::vector< std::size_t > GetOptimalWay()
Definition optimal_way.h:31
void FindOptimalWay(Point p1, Point p2)
Definition optimal_way.cpp:201
void AddTangent(const LinearFunction &tangent, T &obstacle1, U &obstacle2)
Добавляет информацию об общей касательной двух препятствий
Definition optimal_way.cpp:38
void AddCommonTangents()
Definition optimal_way.cpp:50
void AddGraphTangentPoints()
Definition optimal_way.cpp:87
bool TangentGoesThroughOtherObstacle(const LinearFunction &tangent, T &obstacle1, U &obstacle2)
Проверяет, пересекает ли общая касательная двух препятствий другое препятствие
Definition optimal_way.cpp:12
PathWayGraph graph_
Definition optimal_way.h:46
OptimalWayCalculator(const std::vector< CircleObstacle > &circles, const std::vector< PolygonObstacle > &polys)
Находит кратчайший путь между точками
Definition optimal_way.h:20
std::vector< std::size_t > optimal_way_
Definition optimal_way.h:49
std::vector< lib::Segment > GetTrajectoryPart()
Definition optimal_way.h:35
std::vector< CircleObstacle > circles_
Definition optimal_way.h:41
std::set< std::size_t > AddGraphControlPoints(Point point)
Definition optimal_way.cpp:152
std::vector< lib::Segment > trajectory_part_
Definition optimal_way.h:55
double optimal_way_length_
Definition optimal_way.h:52
void ResetInformation()
Definition optimal_way.cpp:252
std::vector< PolygonObstacle > polys_
Definition optimal_way.h:43
double GetOptimalWayLength()
Definition optimal_way.h:33
Definition adjacency_matrix.cpp:7
Прямая вида ax+by+c=0.
Definition obstacles.h:17
Граф вершин между контрольными точками
Definition path_graph.h:46
std::vector< std::shared_ptr< PathWayNode > > nodes
Definition path_graph.h:48
Точка с геометрическими связями
Definition obstacles.h:46