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
gui::FlyingRobot Class Reference

Класс, который позволяет анимировать движение робота More...

#include <flying_robot.h>

Inheritance diagram for gui::FlyingRobot:
Collaboration diagram for gui::FlyingRobot:

Public Member Functions

 FlyingRobot ()=default
 
 FlyingRobot (gui::Trajectory *trj)
 Инициализирует новый экземпляр FlyingRobot.
 
void Draw (QCustomPlot *plot) override
 Отрисовывает png картинку
 
gui::TrajectoryGetTrajectory () const
 
void ReDraw (QCustomPlot *plot)
 Эта функция нужна для того, чтобы обновлять позицию картинки на полотне
 
void SetSpeed (SpeedOfRobot speed)
 
void SetTrajectory (gui::Trajectory *trj)
 

Private Member Functions

void SetNewPositionOnCircle ()
 Обновляет текущее положение точки на окружности
 
void SetNewPositionOnLine ()
 Обновляет текущее положение точки на линии
 
void UpdateCircleFields ()
 Обновляет поля curr_angle_on_circle_, clockwise_ и distribution_of_angle_.
 
void UpdateLineFields ()
 Обновляет поля cos_of_line_ и sin_of_line_.
 
void UpdateSegment ()
 Берет следующий Segment, обновляя приватные поля
 

Private Attributes

bool clockwise_
 
double cos_of_line_
 
int count_of_partitions_
 
double curr_angle_on_circle_
 
lib::Point curr_point_
 
double distribution_of_angle_
 
QCPGraph * graph_ {nullptr}
 
size_t index_of_segment_ = 0
 
double line_const_
 
double sin_of_line_
 
SpeedOfRobot speed_ = SpeedOfRobot::Medium
 
gui::Trajectorytrajectory_
 

Detailed Description

Класс, который позволяет анимировать движение робота

Представляет из себя png картинку, которая движется по траектории

Constructor & Destructor Documentation

◆ FlyingRobot() [1/2]

gui::FlyingRobot::FlyingRobot ( )
default

◆ FlyingRobot() [2/2]

gui::FlyingRobot::FlyingRobot ( gui::Trajectory * trj)
inline

Инициализирует новый экземпляр FlyingRobot.

Parameters
gui::Trajectoryтраектория
22 : trajectory_{trj}, curr_point_{trj->Segments()[0].Start()} {
23 // Сразу задаем нужные приватные поля при инициализации экземпляра класса, в
24 // зависимости от того, lib::Segment является аркой или прямой линией
25 if (trajectory_->Segments()[0].IsArc())
27 else
29 }
void UpdateCircleFields()
Обновляет поля curr_angle_on_circle_, clockwise_ и distribution_of_angle_.
Definition flying_robot.cpp:95
gui::Trajectory * trajectory_
Definition flying_robot.h:51
lib::Point curr_point_
Definition flying_robot.h:56
void UpdateLineFields()
Обновляет поля cos_of_line_ и sin_of_line_.
Definition flying_robot.cpp:66
std::vector< gui::Segment > & Segments()
Возвращает вектор сегментов
Definition trajectory.h:42
Here is the call graph for this function:

Member Function Documentation

◆ Draw()

void gui::FlyingRobot::Draw ( QCustomPlot * plot)
overridevirtual

Отрисовывает png картинку

Parameters
plotуказатель на полотно

Implements gui::Drawable.

126 {
127 if (!trajectory_) throw std::invalid_argument("The trajectory is not built!");
128
129 graph_ = plot->addGraph(plot->xAxis, plot->yAxis);
130 graph_->setPen(QColor(50, 50, 50, 255));
131 graph_->setLineStyle(QCPGraph::lsNone);
132 graph_->setScatterStyle(
133 QCPScatterStyle(QPixmap("../images/flying_robot_pixel.png")
134 .scaled(QSize(36, 16), Qt::KeepAspectRatio)));
135 graph_->setData({curr_point_.x}, {curr_point_.y});
136}
QCPGraph * graph_
Definition flying_robot.h:52
double y
Definition point.h:18
double x
Definition point.h:17
Here is the caller graph for this function:

◆ GetTrajectory()

gui::Trajectory * gui::FlyingRobot::GetTrajectory ( ) const
inline
46{ return trajectory_; }
Here is the caller graph for this function:

◆ ReDraw()

void gui::FlyingRobot::ReDraw ( QCustomPlot * plot)

Эта функция нужна для того, чтобы обновлять позицию картинки на полотне

Parameters
plotуказатель на полотно
138 {
139 if (trajectory_->Segments()[index_of_segment_].IsArc())
141 else
143
144 graph_->setData({curr_point_.x}, {curr_point_.y});
145
146 plot->replot();
147}
void SetNewPositionOnCircle()
Обновляет текущее положение точки на окружности
Definition flying_robot.cpp:32
size_t index_of_segment_
Definition flying_robot.h:55
void SetNewPositionOnLine()
Обновляет текущее положение точки на линии
Definition flying_robot.cpp:19
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetNewPositionOnCircle()

void gui::FlyingRobot::SetNewPositionOnCircle ( )
private

Обновляет текущее положение точки на окружности

32 {
33 if (count_of_partitions_ == 0)
35 else {
37
44
45 if (clockwise_)
47 else
49 }
50}
void UpdateSegment()
Берет следующий Segment, обновляя приватные поля
Definition flying_robot.cpp:52
double curr_angle_on_circle_
Definition flying_robot.h:68
int count_of_partitions_
Definition flying_robot.h:59
bool clockwise_
Definition flying_robot.h:72
double distribution_of_angle_
Definition flying_robot.h:70
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetNewPositionOnLine()

void gui::FlyingRobot::SetNewPositionOnLine ( )
private

Обновляет текущее положение точки на линии

19 {
20 if (count_of_partitions_ == 0) {
22 } else {
24
25 // Полотно обновляется раз в 5 миллисекунд, скорость робота такая: смещение
26 // на 1 происходит за 20 вызовов функции, поэтому мы и умножаем на 1/20
29 }
30}
double cos_of_line_
Definition flying_robot.h:63
double line_const_
Definition flying_robot.h:62
double sin_of_line_
Definition flying_robot.h:64
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetSpeed()

void gui::FlyingRobot::SetSpeed ( SpeedOfRobot speed)
inline
48{ speed_ = speed; }
SpeedOfRobot speed_
Definition flying_robot.h:53
Here is the caller graph for this function:

◆ SetTrajectory()

void gui::FlyingRobot::SetTrajectory ( gui::Trajectory * trj)
6 {
7 trajectory_ = trj;
8 if (!trajectory_) return;
9
10 curr_point_ = trj->Segments()[0].Start();
12
13 if (trajectory_->Segments()[0].IsArc())
15 else
17}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateCircleFields()

void gui::FlyingRobot::UpdateCircleFields ( )
private

Обновляет поля curr_angle_on_circle_, clockwise_ и distribution_of_angle_.

95 {
96 auto angles = trajectory_->Segments()[index_of_segment_].ToAnglesOnCircle();
97
98 double len_sector = trajectory_->Segments()[index_of_segment_].Radius() *
99 (abs(angles.second - angles.first) * M_PI / 180);
100
101 switch (speed_) {
102 case SpeedOfRobot::Low: {
103 count_of_partitions_ = len_sector * 100;
104 break;
105 }
107 count_of_partitions_ = len_sector * 20;
108 break;
109 }
110 case SpeedOfRobot::High: {
111 count_of_partitions_ = len_sector * 20 / 7.5;
112 break;
113 }
114 }
115
116 curr_angle_on_circle_ = angles.first * M_PI / 180;
118 abs(angles.second - angles.first) / count_of_partitions_ * M_PI / 180;
119
120 if (angles.second * M_PI / 180 - curr_angle_on_circle_ < 0)
121 clockwise_ = true;
122 else
123 clockwise_ = false;
124}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateLineFields()

void gui::FlyingRobot::UpdateLineFields ( )
private

Обновляет поля cos_of_line_ и sin_of_line_.

66 {
69 double R = sqrt(p.x * p.x + p.y * p.y);
70
71 double dis = lib::DistanceBetweenPoints(
74
75 switch (speed_) {
77 line_const_ = 0.01;
78 break;
79
81 line_const_ = 0.05;
82 break;
83
85 line_const_ = 0.375;
86 break;
87 }
88
90
91 cos_of_line_ = p.x / R;
92 sin_of_line_ = p.y / R;
93}
double DistanceBetweenPoints(const Point &first_point, const Point &second_point)
Находит расстояние между двумя мат. точками
Definition point.cpp:27
Математическая точка
Definition point.h:16
Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateSegment()

void gui::FlyingRobot::UpdateSegment ( )
private

Берет следующий Segment, обновляя приватные поля

52 {
54
55 if (index_of_segment_ == trajectory_->Segments().size())
57
59
62 else
64}
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ clockwise_

bool gui::FlyingRobot::clockwise_
private

◆ cos_of_line_

double gui::FlyingRobot::cos_of_line_
private

◆ count_of_partitions_

int gui::FlyingRobot::count_of_partitions_
private

◆ curr_angle_on_circle_

double gui::FlyingRobot::curr_angle_on_circle_
private

◆ curr_point_

lib::Point gui::FlyingRobot::curr_point_
private

◆ distribution_of_angle_

double gui::FlyingRobot::distribution_of_angle_
private

◆ graph_

QCPGraph* gui::FlyingRobot::graph_ {nullptr}
private
52{nullptr};

◆ index_of_segment_

size_t gui::FlyingRobot::index_of_segment_ = 0
private

◆ line_const_

double gui::FlyingRobot::line_const_
private

◆ sin_of_line_

double gui::FlyingRobot::sin_of_line_
private

◆ speed_

SpeedOfRobot gui::FlyingRobot::speed_ = SpeedOfRobot::Medium
private

◆ trajectory_

gui::Trajectory* gui::FlyingRobot::trajectory_
private

The documentation for this class was generated from the following files: