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
segment.h
Go to the documentation of this file.
1#pragma once
2
3// our code libs:
4#include "point.h"
5
6namespace lib {
7
8/**
9 * @brief Сегмент математический траектории
10 * @details Может быть как отрезком, так и дугой некоторой окружности
11 */
12class Segment {
13 public:
14 Segment() = default;
15
16 /**
17 * @brief Инициализирует новый экземпляр сегмента,
18 * как отрезок с началом и концом
19 * @param start: точка начала
20 * @param end: точка конца
21 */
22 Segment(const Point& start, const Point& end) : start_{start}, end_{end} {}
23
24 /**
25 * @brief Инициализирует новый экземпляр сегмента,
26 * как дугу окружности с началом и концом
27 * @param start: точка начала
28 * @param end: точка конца
29 * @param center: центр окружности
30 */
31 Segment(const Point& start, const Point& end, const Point& center);
32
33 /// @brief Возвращает начало сегмента
34 Point& Start() { return start_; }
35
36 /// @brief Возвращает начало сегмента
37 const Point& Start() const { return start_; }
38
39 /// @brief Возвращает конец сегмента
40 Point& End() { return end_; }
41
42 /// @brief Возвращает конец сегмента
43 const Point& End() const { return end_; }
44
45 /**
46 * @brief Возвращает центр окружности
47 * @return Point&: центр окружности
48 * @throw std::runtime_error: если сегмент не имеет отношения к окружности
49 */
50 Point& Center();
51
52 /**
53 * @brief Возвращает центр окружности
54 * @return const Point&: центр окружности
55 * @throw std::runtime_error: если сегмент не имеет отношения к окружности
56 */
57 const Point& Center() const;
58
59 /**
60 * @brief Возвращает радиус окружности
61 * @return double радиус окружности
62 * @throw std::runtime_error: если сегмент не имеет отношения к окружности
63 */
64 double Radius() const;
65
66 /**
67 * @brief Проверяет, является ли текущий сегмент дугой окружности
68 * @return true: да, является
69 * @return false: нет, не является
70 */
71 bool IsArc() const { return !isinf(center_); }
72
73 /**
74 * @brief Возвращает угловые коэффициенты на окружности
75 * @return std::pair<double, double>: угол первой точки, угол второй точки
76 */
77 std::pair<double, double> ToAnglesOnCircle();
78
79 /**
80 * @brief Проверяет, может ли сегмент стать дугой с учетом центра окружности
81 * @param seg: сегмент
82 * @param center: центр предполагаемой окружности
83 * @return true: если может
84 * @return false: если выпадет исключение
85 */
86 static bool CouldBeArc(const lib::Segment& seg, const lib::Point& center);
87
88 private:
92};
93
94} // namespace lib
Сегмент математический траектории
Definition segment.h:12
const Point & Start() const
Возвращает начало сегмента
Definition segment.h:37
static bool CouldBeArc(const lib::Segment &seg, const lib::Point &center)
Проверяет, может ли сегмент стать дугой с учетом центра окружности
Definition segment.cpp:55
std::pair< double, double > ToAnglesOnCircle()
Возвращает угловые коэффициенты на окружности
Definition segment.cpp:38
double Radius() const
Возвращает радиус окружности
Definition segment.cpp:32
Segment()=default
Point & Center()
Возвращает центр окружности
Definition segment.cpp:20
Point & Start()
Возвращает начало сегмента
Definition segment.h:34
Point start_
Definition segment.h:89
bool IsArc() const
Проверяет, является ли текущий сегмент дугой окружности
Definition segment.h:71
Point end_
Definition segment.h:90
Point center_
Definition segment.h:91
Segment(const Point &start, const Point &end)
Инициализирует новый экземпляр сегмента, как отрезок с началом и концом
Definition segment.h:22
Point & End()
Возвращает конец сегмента
Definition segment.h:40
const Point & End() const
Возвращает конец сегмента
Definition segment.h:43
Definition base.h:10
bool isinf(const lib::Point &point)
Проверяет, является ли точка бесконечной (имеет именование в стиле стандартной функции)
Definition point.h:100
Математическая точка
Definition point.h:16
static const Point InfPoint()
Definition point.h:38