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
point.h
Go to the documentation of this file.
1#pragma once
2
3// std libs:
4#include <cmath> // nath functional used everywhere with Point
5
6// our code libs:
7#include "infinity.h"
8
9namespace lib {
10
11constexpr double precision = 1.0E-6;
12
13// MARK: Point
14
15/// @brief Математическая точка
16struct Point {
17 double x;
18 double y;
19
20 Point(double x = 0, double y = 0) : x{x}, y{y} {}
21
22 Point(const Point& point) = default;
23
24 Point& operator=(const Point& point) = default;
25
26 Point& operator+=(const Point& d) {
27 x += d.x;
28 y += d.y;
29 return *this;
30 }
31
32 Point& operator-=(const Point& d) {
33 x -= d.x;
34 y -= d.y;
35 return *this;
36 }
37
38 const static Point InfPoint() { return {inf, inf}; }
39};
40
41inline Point operator+(Point a, Point b) { return a += b; }
42inline Point operator-(Point a, Point b) { return a -= b; }
43
44bool operator==(Point a, Point b);
45
46inline bool operator!=(Point a, Point b) { return !(a == b); }
47
48double DistanceBetweenPoints(const Point& first_point,
49 const Point& second_point);
50
51// MARK: PointAsAngles
52
53/**
54 * @brief Математическая точка на ед. окружности, выраженная в градусах
55 * @details Имеет два поля, представляющие собой углы
56 * на промежутках [0°; 360°] и [-360°; 0°]
57 */
59 /// @brief Угол на промежутке [0°; 360°]
61
62 /// @brief Угол на промежутке [-360°; 0°]
64
65 PointAsAngles(double positive_angle = 0, double negative_angle = 0);
66
67 /**
68 * @brief Переводит lib::PointAsAngles в std::pair
69 * @return std::pair<double, double>: пара углов
70 */
71 std::pair<double, double> ToPair() {
72 return std::make_pair(positive_angle, negative_angle);
73 }
74
75 static PointAsAngles FromPoint(const lib::Point& point,
76 const lib::Point& center);
77
78 const static PointAsAngles InfPoint() { return {inf, inf}; }
79};
80
81// MARK: CircleQuadrant
82
83/// @brief Четверть мат. окружности
85
87 const lib::Point& center);
88
89} // namespace lib
90
91// MARK: isinf
92
93/**
94 * @brief Проверяет, является ли точка бесконечной
95 * (имеет именование в стиле стандартной функции)
96 * @param point: точка
97 * @return true: если является
98 * @return false: если не является
99 */
100inline bool isinf(const lib::Point& point) {
101 return std::isinf(point.x) || std::isinf(point.y);
102}
103
104/**
105 * @brief Проверяет, является ли точка бесконечной
106 * (имеет именование в стиле стандартной функции)
107 * @param point: точка на ед. окружности
108 * @return true: если является
109 * @return false: если не является
110 */
111inline bool isinf(const lib::PointAsAngles& point) {
112 return std::isinf(point.positive_angle) || std::isinf(point.negative_angle);
113}
Definition base.h:10
bool operator==(Point a, Point b)
Оператор сравнения двух точек
Definition point.cpp:17
double DistanceBetweenPoints(const Point &first_point, const Point &second_point)
Находит расстояние между двумя мат. точками
Definition point.cpp:27
CircleQuadrant QuadrantOccupiedByPoint(const lib::Point &point, const lib::Point &center)
Находит, в какой части окружности лежит мат. точка
Definition point.cpp:39
bool operator!=(Point a, Point b)
Definition point.h:46
Point operator+(Point a, Point b)
Definition point.h:41
constexpr double inf
Infinity.
Definition infinity.h:9
Point operator-(Point a, Point b)
Definition point.h:42
CircleQuadrant
Четверть мат. окружности
Definition point.h:84
bool isinf(const lib::Point &point)
Проверяет, является ли точка бесконечной (имеет именование в стиле стандартной функции)
Definition point.h:100
Математическая точка на ед. окружности, выраженная в градусах
Definition point.h:58
PointAsAngles(double positive_angle=0, double negative_angle=0)
Инициализирует новый экземпляр Point As Angles:: Point As Angles.
Definition point.cpp:77
static PointAsAngles FromPoint(const lib::Point &point, const lib::Point &center)
Переводит мат. точку в мат. точку на ед. окружности
Definition point.cpp:90
double negative_angle
Угол на промежутке [-360°; 0°].
Definition point.h:63
std::pair< double, double > ToPair()
Переводит lib::PointAsAngles в std::pair.
Definition point.h:71
static const PointAsAngles InfPoint()
Definition point.h:78
double positive_angle
Угол на промежутке [0°; 360°].
Definition point.h:60
Математическая точка
Definition point.h:16
static const Point InfPoint()
Definition point.h:38
Point(const Point &point)=default
double y
Definition point.h:18
Point(double x=0, double y=0)
Definition point.h:20
double x
Definition point.h:17
Point & operator-=(const Point &d)
Definition point.h:32
Point & operator=(const Point &point)=default
Point & operator+=(const Point &d)
Definition point.h:26