VM2D  1.12
Vortex methods for 2D flows simulation
VMlib::PairInt Class Reference

Класс, опеделяющий пару целых чисел More...

#include <PairInt.h>

Inheritance diagram for VMlib::PairInt:
Collaboration diagram for VMlib::PairInt:

Public Member Functions

 PairInt ()
 Пустой конструктор More...
 
 PairInt (const numvector< int, 2 > &_r)
 Конструктор и приведение типа из numvector<int, 2> More...
 
 PairInt (const PairInt &_r)
 Конструктор копирования More...
 
 PairInt (const std::initializer_list< int > &z)
 Конструктор инициализации списком More...
 
 ~PairInt ()
 Деструктор More...
 
int & operator[] (size_t i)
 
const int & operator[] (size_t i) const
 
size_t size () const
 
auto operator& (const numvector< P, n > &y) const -> typename std::remove_const< decltype(this->data[0]*y[0])>::type
 Оператор "&" скалярного умножения More...
 
auto operator^ (const numvector< P, 3 > &y) const -> numvector< typename std::remove_const< decltype(this->data[1]*y[2])>::type, 3 >
 Оператор "^" векторного произведения More...
 
auto operator^ (const numvector< P, 2 > &y) const -> typename std::remove_const< decltype(this->data[0]*y[1])>::type
 Оператор "^" вычисления третьей компоненты векторного произведения More...
 
numvector< int, n > & operator*= (P c)
 Оператор "*=" домножения вектора на действительное число More...
 
numvector< int, n > & operator/= (P c)
 Оператор "/=" деления вектора на действительное число More...
 
numvector< int, n > & operator+= (const numvector< P, n > &y)
 Оператор "+=" прибавления другого вектора More...
 
numvector< int, n > & operator-= (const numvector< P, n > &y)
 Оператор "-=" вычитания другого вектора More...
 
auto operator+ (const numvector< P, n > &y) const -> numvector< typename std::remove_const< decltype(this->data[0]+y[0])>::type, n >
 Оператор "+" сложения двух векторов More...
 
const numvector< int, n > & operator+ () const
 Оператор "+" унарного плюса More...
 
auto operator- (const numvector< P, n > &y) const -> numvector< typename std::remove_const< decltype(this->data[0]-y[0])>::type, n >
 Оператор "-" вычитания двух векторов More...
 
numvector< int, n > operator- () const
 Оператор "-" унарного минуса More...
 
auto operator* (const P c) const -> numvector< typename std::remove_const< decltype(this->data[0]*c)>::type, n >
 Оператор "*" умножения вектора на число (вектор слева, число справа) More...
 
bool operator== (const numvector< P, n > &y) const
 Оператор "==" логического равенства More...
 
bool operator!= (const numvector< P, n > &y) const
 Перегрузка оператора "!=" логического неравенства More...
 
auto norm1 () const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
 Вычисление 1-нормы вектора More...
 
auto norminf () const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
 Вычисление inf-нормы вектора More...
 
length () const
 Вычисление 2-нормы (длины) вектора More...
 
auto length2 () const -> typename std::remove_const< typename std::remove_reference< decltype(this->data[0])>::type >::type
 Вычисление квадрата нормы (длины) вектора More...
 
auto unit (P newlen=1) const -> numvector< typename std::remove_const< decltype(this->data[0]*newlen)>::type, n >
 Вычисление орта вектора или вектора заданной длины, коллинеарного данному More...
 
void normalize (P newlen=1.0)
 Нормирование вектора на заданную длину More...
 
size_t member (const P &s) const
 Проверка вхождения элемента в вектор More...
 
 operator std::set< P > () const
 Приведение вектора к типу std::set. More...
 
 operator std::vector< P > () const
 Приведение вектора к типу std::vector. More...
 
numvector< int, n > rotateLeft (size_t k) const
 "Вращение" вектора на несколько позиций влево More...
 
numvector< int, 2 > kcross () const
 Геометрический поворот двумерного вектора на 90 градусов More...
 
numvector< int, n > & toZero (P val=0)
 Установка всех компонент вектора в константу (по умолчанию — нуль) More...
 
auto dist2To (const numvector< P, n > &y) const -> typename std::remove_const< decltype(this->data[0]-y[0])>::type
 Вычисление квадрата расстояния до другой точки More...
 
distTo (const numvector< P, n > &y)
 Вычисление расстояния между двумя точками More...
 

Protected Attributes

int data [n]
 

Detailed Description

Класс, опеделяющий пару целых чисел

Наследуется от numvector<int, 2>, имеет дополнительные возможности:

  • поворота на заданный угол вокруг заданного направления;
  • генерируется MPI-описатель для возможности его пересылки как единичного объекта.
Author
Марчевский Илья Константинович
Сокол Ксения Сергеевна
Рятина Евгения Павловна
Колганова Александра Олеговна 1.12
Date
14 января 2024 г.

Definition at line 68 of file PairInt.h.

Constructor & Destructor Documentation

VMlib::PairInt::PairInt ( )
inline

Пустой конструктор

Definition at line 75 of file PairInt.h.

75 { };
PairInt::PairInt ( const numvector< int, 2 > &  _r)

Конструктор и приведение типа из numvector<int, 2>

Parameters
[in]_rконстантная ссылка на копируемый объект типа numvector<int, 2>

Definition at line 45 of file PairInt.cpp.

46 {
47  data[0] = _r[0];
48  data[1] = _r[1];
49 }//PairInt(...)
PairInt::PairInt ( const PairInt _r)

Конструктор копирования

Parameters
[in]_rконстантная ссылка на копируемый вектор

Definition at line 53 of file PairInt.cpp.

54 {
55  data[0] = _r[0];
56  data[1] = _r[1];
57 }//PairInt(...)
PairInt::PairInt ( const std::initializer_list< int > &  z)

Конструктор инициализации списком

Parameters
[in]zконстантная ссылка на список инициализации из чисел типа int
Warning
Длина списка инициализации не проверяется, от него берутся только 2 первых элемента

Definition at line 61 of file PairInt.cpp.

62 {
63  for (size_t i = 0; i < 2; ++i)
64  data[i] = *(z.begin() + i);
65 }//PairInt(...)
VMlib::PairInt::~PairInt ( )
inline

Деструктор

Definition at line 96 of file PairInt.h.

96 { };

Member Function Documentation

auto VMlib::numvector< int , n >::dist2To ( const numvector< P, n > &  y) const-> typename std::remove_const<decltype(this->data[0] - y[0])>::type
inlineinherited

Вычисление квадрата расстояния до другой точки

Template Parameters
Pтип данных второй точки
Parameters
[in]yконстантная ссылка на радиус-вектор второй точки
Returns
квадрат расстояния между точками

Definition at line 538 of file numvector.h.

539  {
540  return (*this - y).length2();
541  }//dist2To(...)
R VMlib::numvector< int , n >::distTo ( const numvector< P, n > &  y)
inlineinherited

Вычисление расстояния между двумя точками

Template Parameters
Pтип данных второй точки
Rтип данных результата (по умолчанию double)
Parameters
[in]yконстантная ссылка на радиус-вектор второй точки
Returns
расстояние между точками

Definition at line 551 of file numvector.h.

552  {
553  R res = (*this - y) & (*this - y);
554  return sqrt(res);
555  }//distTo(...)
numvector<int , 2> VMlib::numvector< int , n >::kcross ( ) const
inlineinherited

Геометрический поворот двумерного вектора на 90 градусов

Исходный вектор при этом не изменяется
Эквивалентно умножению слева на орт третьей оси, т.е. \( \vec k \times \vec r \)

Template Parameters
Tтип данных
Returns
новый двумерный вектор, полученный поворотом исходного на 90 градусов

Definition at line 507 of file numvector.h.

508  {
509  numvector<T, 2> res;
510  res[0] = -this->data[1];
511  res[1] = this->data[0];
512  return res;
513  }//kcross()
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
P VMlib::numvector< int , n >::length ( ) const
inlineinherited

Вычисление 2-нормы (длины) вектора

Корень из скалярного квадрата вектора

Template Parameters
Pтип результата (по умолчанию double)
Returns
норма (длина) вектора

Definition at line 371 of file numvector.h.

372  {
373  P res = *this & *this;
374  return sqrt(res);
375  }//length()
auto VMlib::numvector< int , n >::length2 ( ) const-> typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type
inlineinherited

Вычисление квадрата нормы (длины) вектора

Скалярный квадрат вектора

Returns
квадрат нормы (длины) вектора того же типа, что и компоненты вектора

Definition at line 383 of file numvector.h.

384  {
385  return (*this & *this);
386  }//length2()
size_t VMlib::numvector< int , n >::member ( const P &  s) const
inlineinherited

Проверка вхождения элемента в вектор

Template Parameters
Pтип данных проверяемого элемента
Parameters
[in]sпроверяемый элемент
Returns
позиция первого вхождения элемента s; если не входит — возвращает (-1), приведенный к типу size_t

Definition at line 430 of file numvector.h.

431  {
432  for (size_t i = 0; i < n; ++i)
433  if (this->data[i] == s)
434  return i;
435 
436  return static_cast<size_t>(-1);
437  }//member(...)
auto VMlib::numvector< int , n >::norm1 ( ) const-> typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type
inlineinherited

Вычисление 1-нормы вектора

Сумма модулей компонент вектора

Returns
1-норма вектора

Definition at line 337 of file numvector.h.

338  {
339  typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type res = 0;
340  for (size_t i = 0; i < n; ++i)
341  res += abs(this->data[i]);
342  return res;
343  }//norm1()
void VMlib::numvector< int , n >::normalize ( newlen = 1.0)
inlineinherited

Нормирование вектора на заданную длину

Если в качестве новой длины указано отрицательное число — у вектора будет изменено направление

Template Parameters
Pтип числа, задающего длину вектора
Parameters
[in]newlenновая длина вектора (по умолчанию 1.0)
Warning
Работает корректно только для векторов с компонентами типа float и double

Definition at line 416 of file numvector.h.

417  {
418  auto ilen = static_cast<decltype(this->data[0] * newlen)>(newlen / std::max(this->length(), 1e-16));
419  *this *= ilen;
420  }//normalize(...)
P length() const
Вычисление 2-нормы (длины) вектора
Definition: numvector.h:371
auto VMlib::numvector< int , n >::norminf ( ) const-> typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type
inlineinherited

Вычисление inf-нормы вектора

Наибольшая по модулю компонента вектора

Returns
inf-норма вектора

Definition at line 351 of file numvector.h.

352  {
353  typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type res = 0;
354  for (size_t i = 0; i < n; ++i)
355  {
356  if (abs(this->data[i]) > res)
357  res = abs(this->data[i]);
358  }
359  return res;
360  }//norminf()
VMlib::numvector< int , n >::operator std::set< P > ( ) const
inlineinherited

Приведение вектора к типу std::set.

Template Parameters
Pтип данных компонент множества
Returns
множество типа std::set, состоящее из тех же элементов, что исходный вектор

Definition at line 446 of file numvector.h.

447  {
448  std::set<P> newset;
449  for (size_t i = 0; i < n; ++i)
450  newset.insert(this->data[i]);
451  return newset;
452  }//toSet()
VMlib::numvector< int , n >::operator std::vector< P > ( ) const
inlineinherited

Приведение вектора к типу std::vector.

Template Parameters
Pтип данных компонент std::vector
Returns
вектор типа std::vector, состоящий из тех же элементов, что исходный вектор

Definition at line 460 of file numvector.h.

461  {
462  std::vector<P> vec;
463  vec.reserve(n);
464  for (size_t i = 0; i < n; ++i)
465  vec.push_back(this->data[i]);
466  return vec;
467  }
bool VMlib::numvector< int , n >::operator!= ( const numvector< P, n > &  y) const
inlineinherited

Перегрузка оператора "!=" логического неравенства

Template Parameters
Pтип данных компонент вектора, с которым производится сравнение
nдлина вектора
Parameters
[in]yконстантная ссылка на сравниваемый вектор
Returns
true, если векторы различаются, false в противном случае

Definition at line 324 of file numvector.h.

325  {
326  return !(*this == y);
327  }//operator!=(...)
auto VMlib::numvector< int , n >::operator& ( const numvector< P, n > &  y) const-> typename std::remove_const<decltype(this->data[0] * y[0])>::type
inlineinherited

Оператор "&" скалярного умножения

Template Parameters
Pтип данных компонент вектора - второго сомножителя
nдлина обоих векторов
Parameters
[in]yконстантная ссылка на второй множитель
Returns
результат вычисления скалярного произведения, приведенный к нужному типу

Definition at line 123 of file numvector.h.

124  {
125  typename std::remove_const<decltype(this->data[0] * y[0])>::type res = 0;
126  for (size_t j = 0; j < n; ++j)
127  res += this->data[j] * y[j];
128  return res;
129  }//operator&(...)
auto VMlib::numvector< int , n >::operator* ( const P  c) const-> numvector<typename std::remove_const<decltype(this->data[0] * c)>::type, n>
inlineinherited

Оператор "*" умножения вектора на число (вектор слева, число справа)

Template Parameters
Pтип данных множителя
nдлина вектора
Parameters
[in]cчисло-множитель
Returns
результат умножения вектора на число, приведенный к соответствующему типу

Definition at line 267 of file numvector.h.

268  {
269  numvector<typename std::remove_const<decltype(this->data[0] * c)>::type, n> res;
270  for (size_t i = 0; i < n; ++i)
271  res[i] = c * this->data[i];
272  return res;
273  }//operator*(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
numvector<int , n>& VMlib::numvector< int , n >::operator*= ( c)
inlineinherited

Оператор "*=" домножения вектора на действительное число

Template Parameters
Tтип данных компонент вектора
Pтип данных множителя
nдлина вектора
Parameters
[in]cчисловой множитель типа, приводимого к типу компонент вектора
Returns
ссылку на самого себя после домножения на число

Definition at line 172 of file numvector.h.

173  {
174  for (size_t i = 0; i < n; ++i)
175  this->data[i] *= c;
176  return *this;
177  }//operator*=(...)
auto VMlib::numvector< int , n >::operator+ ( const numvector< P, n > &  y) const-> numvector<typename std::remove_const<decltype(this->data[0] + y[0])>::type, n>
inlineinherited

Оператор "+" сложения двух векторов

Template Parameters
Pтип данных компонент вектора - второго слагаемого
nдлина вектора
Parameters
[in]yконстантная ссылка на прибавляемый вектор
Returns
результат сложения двух векторов, приведенный к нужному типу

Definition at line 235 of file numvector.h.

236  {
237  numvector<typename std::remove_const<decltype(this->data[0] + y[0])>::type, n> res;
238  for (size_t i = 0; i < n; ++i)
239  res[i] = this->data[i] + y[i];
240  return res;
241  }//operator+(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
const numvector<int , n>& VMlib::numvector< int , n >::operator+ ( ) const
inlineinherited

Оператор "+" унарного плюса

Template Parameters
Tтип данных компонент вектора
nдлина вектора
Returns
константную ссылку на самого себя

Definition at line 295 of file numvector.h.

296  {
297  return *this;
298  }//operator+()
numvector<int , n>& VMlib::numvector< int , n >::operator+= ( const numvector< P, n > &  y)
inlineinherited

Оператор "+=" прибавления другого вектора

Template Parameters
Tтип данных компонент вектора
Pтип данных компонент прибавляемого вектора
nдлина вектора
Parameters
[in]yконстантная ссылка на прибавляемый вектор
Returns
ссылку на самого себя после сложения с другим вектором

Definition at line 204 of file numvector.h.

205  {
206  for (size_t i = 0; i < n; ++i)
207  this->data[i] += y[i];
208  return *this;
209  }//operator+=(...)
auto VMlib::numvector< int , n >::operator- ( const numvector< P, n > &  y) const-> numvector<typename std::remove_const<decltype(this->data[0] - y[0])>::type, n>
inlineinherited

Оператор "-" вычитания двух векторов

Template Parameters
Pтип данных компонент вектора - вычитаемого
nдлина вектора
Parameters
[in]yконстантная ссылка на вычитаемый вектор
Returns
результат вычитания двух векторов, приведенный к нужному типу

Definition at line 251 of file numvector.h.

252  {
253  numvector<typename std::remove_const<decltype(this->data[0] - y[0])>::type, n> res;
254  for (size_t i = 0; i < n; ++i)
255  res[i] = this->data[i] - y[i];
256  return res;
257  }//operator-(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
numvector<int , n> VMlib::numvector< int , n >::operator- ( ) const
inlineinherited

Оператор "-" унарного минуса

Template Parameters
Tтип данных компонент вектора
nдлина вектора
Returns
противоположный вектор

Definition at line 281 of file numvector.h.

282  {
283  numvector<T, n> res;
284  for (size_t i = 0; i < n; ++i)
285  res[i] = -this->data[i];
286  return res;
287  }//operator-()
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
numvector<int , n>& VMlib::numvector< int , n >::operator-= ( const numvector< P, n > &  y)
inlineinherited

Оператор "-=" вычитания другого вектора

Template Parameters
Tтип данных компонент вектора
Pтип данных компонент вычитаемого вектора
nдлина вектора
Parameters
[in]yконстантная ссылка на вычитаемый вектор
Returns
ссылка на самого себя после вычитания другого вектора

Definition at line 220 of file numvector.h.

221  {
222  for (size_t i = 0; i < n; ++i)
223  this->data[i] -= y[i];
224  return *this;
225  }//operator-=(...)
numvector<int , n>& VMlib::numvector< int , n >::operator/= ( c)
inlineinherited

Оператор "/=" деления вектора на действительное число

Template Parameters
Tтип данных компонент вектора
Pтип данных множителя
nдлина вектора
Parameters
[in]cчисловой делитель типа, приводимого к типу компонент вектора
Returns
ссылку на самого себя после деления на число

Definition at line 188 of file numvector.h.

189  {
190  for (size_t i = 0; i < n; ++i)
191  this->data[i] /= c;
192  return *this;
193  }//operator/=(...)
bool VMlib::numvector< int , n >::operator== ( const numvector< P, n > &  y) const
inlineinherited

Оператор "==" логического равенства

Template Parameters
Pтип данных компонент вектора, с которым производится сравнение
nдлина вектора
Parameters
[in]yконстантная ссылка на сравниваемый вектор
Returns
true, если векторы одинаковые, false в противном случае

Definition at line 308 of file numvector.h.

309  {
310  for (size_t i = 0; i < n; ++i)
311  if (this->data[i] != y[i])
312  return false;
313  return true;
314  }//operator==(...)
int & VMlib::numvector< int , n >::operator[] ( size_t  i)
inlineinherited

Definition at line 101 of file numvector.h.

102  {
103  return this->data[i];
104  }
const int & VMlib::numvector< int , n >::operator[] ( size_t  i) const
inlineinherited

Definition at line 106 of file numvector.h.

107  {
108  return this->data[i];
109  }
auto VMlib::numvector< int , n >::operator^ ( const numvector< P, 3 > &  y) const-> numvector<typename std::remove_const<decltype(this->data[1] * y[2])>::type, 3>
inlineinherited

Оператор "^" векторного произведения

Определен только для трехмерных векторов

Template Parameters
Pтип данных компонент вектора - второго сомножителя
Parameters
[in]yконстантная ссылка на второй множитель
Returns
результат вычисления векторного произведения, приведенный к нужному типу

Definition at line 140 of file numvector.h.

141  {
142  numvector<typename std::remove_const<decltype(this->data[1] * y[2])>::type, 3> vec;
143  vec[0] = this->data[1] * y[2] - this->data[2] * y[1];
144  vec[1] = this->data[2] * y[0] - this->data[0] * y[2];
145  vec[2] = this->data[0] * y[1] - this->data[1] * y[0];
146  return vec;
147  }//operator^(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
auto VMlib::numvector< int , n >::operator^ ( const numvector< P, 2 > &  y) const-> typename std::remove_const<decltype(this->data[0] * y[1])>::type
inlineinherited

Оператор "^" вычисления третьей компоненты векторного произведения

Определен только для двумерных векторов

Template Parameters
Pтип данных компонент вектора - второго множителя
Parameters
[in]yконстантная ссылка на второй множитель
Returns
результат вычисления третьей компоненты векторного произведения двух двумерных векторов, приведенный к нужному типу

Definition at line 158 of file numvector.h.

159  {
160  return (this->data[0] * y[1] - this->data[1] * y[0]);
161  }//operator^(...)
numvector<int , n> VMlib::numvector< int , n >::rotateLeft ( size_t  k) const
inlineinherited

"Вращение" вектора на несколько позиций влево

Исходный вектор при этом не изменяется

Template Parameters
Tтип данных компонент вектора
nдлина вектора
Parameters
[in]kколичество позиций, на которые производится "вращение"
Returns
вектор, полученный "вращением" исходного на k позиций влево

Definition at line 478 of file numvector.h.

479  {
480  if (k > n)
481  throw;
482 
483  if (k == n)
484  return *this;
485 
486  numvector<T, n> res;
487 
488  //for (size_t i = 0; i < n; ++i)
489  // res[i] = r[(i + k) % n];
490 
491  for (size_t i = 0; i < n - k; ++i)
492  res[i] = this->data[i + k];
493  for (size_t i = n - k; i < n; ++i)
494  res[i] = this->data[i + k - n];
495  return res;
496  }//rotateLeft(...)
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив...
Definition: numvector.h:95
size_t VMlib::numvector< int , n >::size ( ) const
inlineinherited

Definition at line 111 of file numvector.h.

112  {
113  return n;
114  }
numvector<int , n>& VMlib::numvector< int , n >::toZero ( val = 0)
inlineinherited

Установка всех компонент вектора в константу (по умолчанию — нуль)

Template Parameters
Tтип данных компонент вектора
Pтип данных константы
nдлина вектора
Parameters
[in]valконстанта, значению которой приравниваются все компоненты вектора (по умолчанию 0)
Returns
ссылка на сам вектор

Definition at line 524 of file numvector.h.

525  {
526  for (size_t i = 0; i < n; ++i)
527  this->data[i] = val;
528  return *this;
529  }
auto VMlib::numvector< int , n >::unit ( newlen = 1) const-> numvector<typename std::remove_const<decltype(this->data[0] * newlen)>::type, n>
inlineinherited

Вычисление орта вектора или вектора заданной длины, коллинеарного данному

Если в качестве новой длины указано отрицательное число — вектор будет противоположно направленным

Template Parameters
Pтип числа, задающего длину вектора
Parameters
[in]newlenдлина получаемого вектора (по умолчанию 1.0)
Returns
вектор, коллинеарный исходному, заданной длины (по умолчанию 1.0)
Warning
для получения float-орта от вектора с компонентами типа float или целыми нужно явно указать параметр 1.0f

Definition at line 399 of file numvector.h.

400  {
401  auto ilen = static_cast<decltype(this->data[0] * newlen)>(newlen / std::max(this->length(), 1e-16));
402  return (*this * ilen);
403  }//unit(...)
P length() const
Вычисление 2-нормы (длины) вектора
Definition: numvector.h:371

Member Data Documentation

int VMlib::numvector< int , n >::data[n]
protectedinherited

Definition at line 98 of file numvector.h.


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