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
lib::Segment Class Reference

Сегмент математический траектории More...

#include <segment.h>

Collaboration diagram for lib::Segment:

Public Member Functions

 Segment ()=default
 
 Segment (const Point &start, const Point &end)
 Инициализирует новый экземпляр сегмента, как отрезок с началом и концом
 
 Segment (const Point &start, const Point &end, const Point &center)
 Инициализирует новый экземпляр сегмента, как дугу окружности с началом и концом
 
PointCenter ()
 Возвращает центр окружности
 
const PointCenter () const
 Возвращает центр окружности
 
PointEnd ()
 Возвращает конец сегмента
 
const PointEnd () const
 Возвращает конец сегмента
 
bool IsArc () const
 Проверяет, является ли текущий сегмент дугой окружности
 
double Radius () const
 Возвращает радиус окружности
 
PointStart ()
 Возвращает начало сегмента
 
const PointStart () const
 Возвращает начало сегмента
 
std::pair< double, double > ToAnglesOnCircle ()
 Возвращает угловые коэффициенты на окружности
 

Static Public Member Functions

static bool CouldBeArc (const lib::Segment &seg, const lib::Point &center)
 Проверяет, может ли сегмент стать дугой с учетом центра окружности
 

Private Attributes

Point center_ {Point::InfPoint()}
 
Point end_
 
Point start_
 

Detailed Description

Сегмент математический траектории

Может быть как отрезком, так и дугой некоторой окружности

Constructor & Destructor Documentation

◆ Segment() [1/3]

lib::Segment::Segment ( )
default

◆ Segment() [2/3]

lib::Segment::Segment ( const Point & start,
const Point & end )
inline

Инициализирует новый экземпляр сегмента, как отрезок с началом и концом

Parameters
startточка начала
endточка конца
22: start_{start}, end_{end} {}
Point start_
Definition segment.h:89
Point end_
Definition segment.h:90

◆ Segment() [3/3]

lib::Segment::Segment ( const Point & start,
const Point & end,
const Point & center )

Инициализирует новый экземпляр сегмента, как дугу окружности с началом и концом

Parameters
startточка начала
endточка конца
centerцентр окружности
13 : start_{start}, end_{end}, center_{center} {
14 if (std::abs(DistanceBetweenPoints(start, center) -
16 throw std::runtime_error(
17 "dev: start and end in Segment do not lie on the same circle");
18}
Point center_
Definition segment.h:91
double DistanceBetweenPoints(const Point &first_point, const Point &second_point)
Находит расстояние между двумя мат. точками
Definition point.cpp:27
constexpr double precision
Definition point.h:11
Here is the call graph for this function:

Member Function Documentation

◆ Center() [1/2]

Point & lib::Segment::Center ( )

Возвращает центр окружности

Returns
Point&: центр окружности
Exceptions
std::runtime_errorесли сегмент не имеет отношения к окружности
20 {
21 if (IsArc()) return center_;
22
23 throw std::runtime_error("dev: Segment is not Arc");
24}
bool IsArc() const
Проверяет, является ли текущий сегмент дугой окружности
Definition segment.h:71
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Center() [2/2]

const Point & lib::Segment::Center ( ) const

Возвращает центр окружности

Returns
const Point&: центр окружности
Exceptions
std::runtime_errorесли сегмент не имеет отношения к окружности
26 {
27 if (IsArc()) return center_;
28
29 throw std::runtime_error("dev: Segment is not Arc");
30}
Here is the call graph for this function:

◆ CouldBeArc()

bool lib::Segment::CouldBeArc ( const lib::Segment & seg,
const lib::Point & center )
static

Проверяет, может ли сегмент стать дугой с учетом центра окружности

Parameters
segсегмент
centerцентр предполагаемой окружности
Returns
true: если может
false: если выпадет исключение
55 {
56 try {
57 lib::Segment(seg.Start(), seg.End(), center);
58 } catch (const std::runtime_error&) {
59 return false;
60 }
61 return true;
62}
Сегмент математический траектории
Definition segment.h:12
Point & Start()
Возвращает начало сегмента
Definition segment.h:34
Point & End()
Возвращает конец сегмента
Definition segment.h:40
Here is the call graph for this function:

◆ End() [1/2]

Point & lib::Segment::End ( )
inline

Возвращает конец сегмента

40{ return end_; }
Here is the caller graph for this function:

◆ End() [2/2]

const Point & lib::Segment::End ( ) const
inline

Возвращает конец сегмента

43{ return end_; }

◆ IsArc()

bool lib::Segment::IsArc ( ) const
inline

Проверяет, является ли текущий сегмент дугой окружности

Returns
true: да, является
false: нет, не является
71{ return !isinf(center_); }
bool isinf(const lib::Point &point)
Проверяет, является ли точка бесконечной (имеет именование в стиле стандартной функции)
Definition point.h:100
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Radius()

double lib::Segment::Radius ( ) const

Возвращает радиус окружности

Returns
double радиус окружности
Exceptions
std::runtime_errorесли сегмент не имеет отношения к окружности
32 {
34
35 throw std::runtime_error("dev: Segment is not Arc");
36}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Start() [1/2]

Point & lib::Segment::Start ( )
inline

Возвращает начало сегмента

34{ return start_; }
Here is the caller graph for this function:

◆ Start() [2/2]

const Point & lib::Segment::Start ( ) const
inline

Возвращает начало сегмента

37{ return start_; }

◆ ToAnglesOnCircle()

std::pair< double, double > lib::Segment::ToAnglesOnCircle ( )

Возвращает угловые коэффициенты на окружности

Returns
std::pair<double, double>: угол первой точки, угол второй точки
38 {
39 auto start_angles = lib::PointAsAngles::FromPoint(Start(), Center());
40 auto end_angles = lib::PointAsAngles::FromPoint(End(), Center());
41
42 auto angle_pairs = std::array{
43 std::make_pair(start_angles.positive_angle, end_angles.positive_angle),
44 std::make_pair(start_angles.positive_angle, end_angles.negative_angle),
45 std::make_pair(start_angles.negative_angle, end_angles.positive_angle),
46 std::make_pair(start_angles.negative_angle, end_angles.negative_angle)};
47
48 return *std::min_element(angle_pairs.begin(), angle_pairs.end(),
49 [](const auto& pair_1, const auto& pair_2) {
50 return std::abs(pair_1.first - pair_1.second) <
51 std::abs(pair_2.first - pair_2.second);
52 });
53}
Point & Center()
Возвращает центр окружности
Definition segment.cpp:20
static PointAsAngles FromPoint(const lib::Point &point, const lib::Point &center)
Переводит мат. точку в мат. точку на ед. окружности
Definition point.cpp:90
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ center_

Point lib::Segment::center_ {Point::InfPoint()}
private
static const Point InfPoint()
Definition point.h:38

◆ end_

Point lib::Segment::end_
private

◆ start_

Point lib::Segment::start_
private

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