VM2D  1.12
Vortex methods for 2D flows simulation
VMlib::numvector< T, n > Class Template Reference

Шаблонный класс, определяющий вектор фиксированной длины
Фактически представляет собой массив, для которого определено большое количество различных операций.
Для доступа к элементам массива используется оператор []. More...

#include <numvector.h>

Collaboration diagram for VMlib::numvector< T, n >:

Public Member Functions

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

Protected Attributes

data [n]
 

Detailed Description

template<typename T, size_t n>
class VMlib::numvector< T, n >

Шаблонный класс, определяющий вектор фиксированной длины
Фактически представляет собой массив, для которого определено большое количество различных операций.
Для доступа к элементам массива используется оператор [].

Template Parameters
Tтип элементов вектора
nдлина вектора
Author
Марчевский Илья Константинович 1.12
Date
14 января 2024 г.

Definition at line 95 of file numvector.h.

Constructor & Destructor Documentation

template<typename T, size_t n>
VMlib::numvector< T, n >::numvector ( )
inline

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

Definition at line 559 of file numvector.h.

559 { };

Here is the caller graph for this function:

template<typename T, size_t n>
template<typename P >
VMlib::numvector< T, n >::numvector ( const P  c)
inlineexplicit

Конструктор, инициализирующий весь вектор одной и той же константой

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

Definition at line 567 of file numvector.h.

568  {
569  for (size_t i = 0; i < n; ++i)
570  this->data[i] = c;
571  }//numvector(...)
template<typename T, size_t n>
VMlib::numvector< T, n >::numvector ( const numvector< T, n > &  vec)
inline

Нешаблонный конструктор копирования

Template Parameters
Tтип данных компонент вектора
nдлина вектора
Parameters
[in]vecконстантная ссылка на копируемый вектор

Definition at line 580 of file numvector.h.

581  {
582  //for (size_t i = 0; i < n; ++i)
583  // r[i] = vec[i];
584  memcpy(this->data, vec.data, n * sizeof(T));
585  }//numvector(...)
template<typename T, size_t n>
template<typename P >
VMlib::numvector< T, n >::numvector ( const numvector< P, n > &  vec)
inline

Шаблонный конструктор копирования

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

Definition at line 594 of file numvector.h.

595  {
596  for (size_t i = 0; i < n; ++i)
597  this->data[i] = vec[i];
598  }//numvector(...)
template<typename T, size_t n>
template<typename P >
VMlib::numvector< T, n >::numvector ( const std::vector< P > &  vec)
inline

Конструктор инициализации с помощью std::vector.

Template Parameters
Pтип данных инициализирующего std::vector
nдлина вектора
Parameters
[in]vecконстантная ссылка на инициализирующий вектор
Warning
при несовпадении длины кидает исключение

Definition at line 609 of file numvector.h.

610  {
611  if (vec.size() != n)
612  throw;
613  for (size_t i = 0; i < n; ++i)
614  this->data[i] = vec[i];
615  }//numvector(...)
template<typename T, size_t n>
VMlib::numvector< T, n >::numvector ( const std::initializer_list< T > &  z)
inline

Нешаблонный конструктор инициализации списком

Template Parameters
Tтип данных
Parameters
[in]zконстантная ссылка на список инициализации
Warning
Длина списка инициализации проверяется, при несовпадении бросается исключение

Definition at line 625 of file numvector.h.

626  {
627  if (z.size() != n)
628  throw;
629  for (size_t i = 0; i < n; ++i)
630  this->data[i] = *(z.begin() + i);
631  }//numvector(...)
template<typename T, size_t n>
template<typename P >
VMlib::numvector< T, n >::numvector ( const std::initializer_list< P > &  z)
inline

Шаблонный конструктор инициализации списком

Template Parameters
Pтип данных инициализирующего списка
Parameters
[in]zконстантная ссылка на список инициализации
Warning
Длина списка инициализации проверяется, при несовпадении бросается исключение

Definition at line 642 of file numvector.h.

643  {
644  if (z.size() != n)
645  throw;
646  for (size_t i = 0; i < n; ++i)
647  this->data[i] = *(z.begin() + i);
648  }//numvector(...)
template<typename T, size_t n>
template<typename P , size_t p>
VMlib::numvector< T, n >::numvector ( const numvector< P, p > &  vec,
add = 0 
)
inlineexplicit

Явный конструктор инициализации вектором другой размерности

  • если новая размерность меньше старой — лишние элементы "отбрасываются"
  • если новая размерность больше старой — новые элементы заполняются заданным элементом
Template Parameters
Pтип данных инициализирующего вектора
pразмерность инициализирующего вектора
Parameters
[in]vecконстантная ссылка на инициализирующий вектор
[in]addэлемент для заполнения при необходимости недостающих компонент (по умолчанию 0)

Definition at line 662 of file numvector.h.

663  {
664  size_t minPN = (p < n) ? p : n;
665  for (size_t i = 0; i < minPN; ++i)
666  this->data[i] = vec[i];
667  for (size_t i = minPN; i < n; ++i)
668  this->data[i] = add;
669  }//numvector(...)

Member Function Documentation

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

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

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

Definition at line 538 of file numvector.h.

539  {
540  return (*this - y).length2();
541  }//dist2To(...)
template<typename T, size_t n>
template<typename R = double, typename P >
R VMlib::numvector< T, n >::distTo ( const numvector< P, n > &  y)
inline

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

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(...)
template<typename T, size_t n>
numvector<T, 2> VMlib::numvector< T, n >::kcross ( ) const
inline

Геометрический поворот двумерного вектора на 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

Here is the caller graph for this function:

template<typename T, size_t n>
template<typename P = double>
P VMlib::numvector< T, n >::length ( ) const
inline

Вычисление 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()

Here is the caller graph for this function:

template<typename T, size_t n>
auto VMlib::numvector< T, n >::length2 ( ) const -> typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type
inline

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

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

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

Definition at line 383 of file numvector.h.

384  {
385  return (*this & *this);
386  }//length2()

Here is the caller graph for this function:

template<typename T, size_t n>
template<typename P >
size_t VMlib::numvector< T, n >::member ( const P &  s) const
inline

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

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(...)
template<typename T, size_t n>
auto VMlib::numvector< T, n >::norm1 ( ) const -> typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type
inline

Вычисление 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()
template<typename T, size_t n>
template<typename P = double>
void VMlib::numvector< T, n >::normalize ( newlen = 1.0)
inline

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

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

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

Here is the caller graph for this function:

template<typename T, size_t n>
auto VMlib::numvector< T, n >::norminf ( ) const -> typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type
inline

Вычисление 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()
template<typename T, size_t n>
template<typename P >
VMlib::numvector< T, n >::operator std::set< P > ( ) const
inline

Приведение вектора к типу 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()
template<typename T, size_t n>
template<typename P >
VMlib::numvector< T, n >::operator std::vector< P > ( ) const
inline

Приведение вектора к типу 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  }
template<typename T, size_t n>
template<typename P >
bool VMlib::numvector< T, n >::operator!= ( const numvector< P, n > &  y) const
inline

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

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!=(...)
template<typename T, size_t n>
template<typename P >
auto VMlib::numvector< T, n >::operator& ( const numvector< P, n > &  y) const -> typename std::remove_const<decltype(this->data[0] * y[0])>::type
inline

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

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&(...)
template<typename T, size_t n>
template<typename P >
auto VMlib::numvector< T, n >::operator* ( const P  c) const -> numvector<typename std::remove_const<decltype(this->data[0] * c)>::type, n>
inline

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

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
template<typename T, size_t n>
template<typename P >
numvector<T, n>& VMlib::numvector< T, n >::operator*= ( c)
inline

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

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*=(...)
template<typename T, size_t n>
template<typename P >
auto VMlib::numvector< T, n >::operator+ ( const numvector< P, n > &  y) const -> numvector<typename std::remove_const<decltype(this->data[0] + y[0])>::type, n>
inline

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

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
template<typename T, size_t n>
const numvector<T, n>& VMlib::numvector< T, n >::operator+ ( ) const
inline

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

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

Definition at line 295 of file numvector.h.

296  {
297  return *this;
298  }//operator+()
template<typename T, size_t n>
template<typename P >
numvector<T, n>& VMlib::numvector< T, n >::operator+= ( const numvector< P, n > &  y)
inline

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

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+=(...)
template<typename T, size_t n>
template<typename P >
auto VMlib::numvector< T, n >::operator- ( const numvector< P, n > &  y) const -> numvector<typename std::remove_const<decltype(this->data[0] - y[0])>::type, n>
inline

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

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
template<typename T, size_t n>
numvector<T, n> VMlib::numvector< T, n >::operator- ( ) const
inline

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

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
template<typename T, size_t n>
template<typename P >
numvector<T, n>& VMlib::numvector< T, n >::operator-= ( const numvector< P, n > &  y)
inline

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

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-=(...)
template<typename T, size_t n>
template<typename P >
numvector<T, n>& VMlib::numvector< T, n >::operator/= ( c)
inline

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

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/=(...)
template<typename T, size_t n>
template<typename P >
bool VMlib::numvector< T, n >::operator== ( const numvector< P, n > &  y) const
inline

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

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==(...)
template<typename T, size_t n>
T& VMlib::numvector< T, n >::operator[] ( size_t  i)
inline

Definition at line 101 of file numvector.h.

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

Definition at line 106 of file numvector.h.

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

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

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

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
template<typename T, size_t n>
template<typename P >
auto VMlib::numvector< T, n >::operator^ ( const numvector< P, 2 > &  y) const -> typename std::remove_const<decltype(this->data[0] * y[1])>::type
inline

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

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

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^(...)
template<typename T, size_t n>
numvector<T, n> VMlib::numvector< T, n >::rotateLeft ( size_t  k) const
inline

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

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

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
template<typename T, size_t n>
size_t VMlib::numvector< T, n >::size ( ) const
inline

Definition at line 111 of file numvector.h.

112  {
113  return n;
114  }
template<typename T, size_t n>
template<typename P = T>
numvector<T, n>& VMlib::numvector< T, n >::toZero ( val = 0)
inline

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

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  }

Here is the caller graph for this function:

template<typename T, size_t n>
template<typename P = double>
auto VMlib::numvector< T, n >::unit ( newlen = 1) const -> numvector<typename std::remove_const<decltype(this->data[0] * newlen)>::type, n>
inline

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

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

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

Here is the caller graph for this function:

Member Data Documentation

template<typename T, size_t n>
T VMlib::numvector< T, n >::data[n]
protected

Definition at line 98 of file numvector.h.


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