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

Protected Attributes

data [n]
 

Detailed Description

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

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

Template Parameters
Tтип элементов вектора
nдлина вектора
Author
Марчевский Илья Константинович \Version 1.14
Date
6 марта 2026 г.

Definition at line 98 of file numvector.h.

Constructor & Destructor Documentation

◆ numvector() [1/8]

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

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

Definition at line 582 of file numvector.h.

582{ };

◆ numvector() [2/8]

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 590 of file numvector.h.

591 {
592 for (size_t i = 0; i < n; ++i)
593 this->data[i] = c;
594 }//numvector(...)

◆ numvector() [3/8]

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 603 of file numvector.h.

604 {
605 //for (size_t i = 0; i < n; ++i)
606 // r[i] = vec[i];
607 memcpy(this->data, vec.data, n * sizeof(T));
608 }//numvector(...)

◆ numvector() [4/8]

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 617 of file numvector.h.

618 {
619 for (size_t i = 0; i < n; ++i)
620 this->data[i] = vec[i];
621 }//numvector(...)

◆ numvector() [5/8]

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 632 of file numvector.h.

633 {
634 if (vec.size() != n)
635 throw;
636 for (size_t i = 0; i < n; ++i)
637 this->data[i] = vec[i];
638 }//numvector(...)

◆ numvector() [6/8]

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 648 of file numvector.h.

649 {
650 if (z.size() != n)
651 throw;
652 for (size_t i = 0; i < n; ++i)
653 this->data[i] = *(z.begin() + i);
654 }//numvector(...)

◆ numvector() [7/8]

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 665 of file numvector.h.

666 {
667 if (z.size() != n)
668 throw;
669 for (size_t i = 0; i < n; ++i)
670 this->data[i] = *(z.begin() + i);
671 }//numvector(...)

◆ numvector() [8/8]

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 685 of file numvector.h.

686 {
687 size_t minPN = (p < n) ? p : n;
688 for (size_t i = 0; i < minPN; ++i)
689 this->data[i] = vec[i];
690 for (size_t i = minPN; i < n; ++i)
691 this->data[i] = add;
692 }//numvector(...)

Member Function Documentation

◆ dist2To()

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 561 of file numvector.h.

562 {
563 return (*this - y).length2();
564 }//dist2To(...)

◆ distTo()

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 574 of file numvector.h.

575 {
576 R res = (*this - y) & (*this - y);
577 return sqrt(res);
578 }//distTo(...)

◆ kcross()

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 513 of file numvector.h.

514 {
515 numvector<T, 2> res;
516 res[0] = -this->data[1];
517 res[1] = this->data[0];
518 return res;
519 }//kcross()
Шаблонный класс, определяющий вектор фиксированной длины Фактически представляет собой массив,...
Definition numvector.h:99
Here is the caller graph for this function:

◆ length()

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 377 of file numvector.h.

378 {
379 P res = *this & *this;
380 return sqrt(res);
381 }//length()
Here is the caller graph for this function:

◆ length2()

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 389 of file numvector.h.

390 {
391 return (*this & *this);
392 }//length2()
Here is the caller graph for this function:

◆ member()

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 436 of file numvector.h.

437 {
438 for (size_t i = 0; i < n; ++i)
439 if (this->data[i] == s)
440 return i;
441
442 return static_cast<size_t>(-1);
443 }//member(...)

◆ norm1()

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 343 of file numvector.h.

344 {
345 typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type res = 0;
346 for (size_t i = 0; i < n; ++i)
347 res += abs(this->data[i]);
348 return res;
349 }//norm1()

◆ normalize()

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 422 of file numvector.h.

423 {
424 auto ilen = static_cast<decltype(this->data[0] * newlen)>(newlen / std::max(this->length(), 1e-16));
425 *this *= ilen;
426 }//normalize(...)
P length() const
Вычисление 2-нормы (длины) вектора
Definition numvector.h:377
Here is the call graph for this function:
Here is the caller graph for this function:

◆ norminf()

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 357 of file numvector.h.

358 {
359 typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type res = 0;
360 for (size_t i = 0; i < n; ++i)
361 {
362 if (abs(this->data[i]) > res)
363 res = abs(this->data[i]);
364 }
365 return res;
366 }//norminf()

◆ operator std::set< P >()

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 452 of file numvector.h.

453 {
454 std::set<P> newset;
455 for (size_t i = 0; i < n; ++i)
456 newset.insert(this->data[i]);
457 return newset;
458 }//toSet()

◆ operator std::vector< P >()

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 466 of file numvector.h.

467 {
468 std::vector<P> vec;
469 vec.reserve(n);
470 for (size_t i = 0; i < n; ++i)
471 vec.push_back(this->data[i]);
472 return vec;
473 }

◆ 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 330 of file numvector.h.

331 {
332 return !(*this == y);
333 }//operator!=(...)

◆ 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 126 of file numvector.h.

127 {
128 typename std::remove_const<decltype(this->data[0] * y[0])>::type res = 0;
129 for (size_t j = 0; j < n; ++j)
130 res += this->data[j] * y[j];
131 return res;
132 }//operator&(...)

◆ 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 273 of file numvector.h.

274 {
275 numvector<typename std::remove_const<decltype(this->data[0] * c)>::type, n> res;
276 for (size_t i = 0; i < n; ++i)
277 res[i] = c * this->data[i];
278 return res;
279 }//operator*(...)

◆ 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 175 of file numvector.h.

176 {
177 for (size_t i = 0; i < n; ++i)
178 this->data[i] *= c;
179 return *this;
180 }//operator*=(...)

◆ operator+() [1/2]

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 301 of file numvector.h.

302 {
303 return *this;
304 }//operator+()

◆ operator+() [2/2]

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 238 of file numvector.h.

239 {
240 numvector<typename std::remove_const<decltype(this->data[0] + y[0])>::type, n> res;
241 for (size_t i = 0; i < n; ++i)
242 res[i] = this->data[i] + y[i];
243 return res;
244 }//operator+(...)

◆ 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 207 of file numvector.h.

208 {
209 for (size_t i = 0; i < n; ++i)
210 this->data[i] += y[i];
211 return *this;
212 }//operator+=(...)

◆ operator-() [1/2]

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

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

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

Definition at line 287 of file numvector.h.

288 {
289 numvector<T, n> res;
290 for (size_t i = 0; i < n; ++i)
291 res[i] = -this->data[i];
292 return res;
293 }//operator-()

◆ operator-() [2/2]

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 254 of file numvector.h.

255 {
256 numvector<typename std::remove_const<decltype(this->data[0] - y[0])>::type, n> res;
257 for (size_t i = 0; i < n; ++i)
258
259
260
261 res[i] = this->data[i] - y[i];
262 return res;
263 }//operator-(...)

◆ 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 223 of file numvector.h.

224 {
225 for (size_t i = 0; i < n; ++i)
226 this->data[i] -= y[i];
227 return *this;
228 }//operator-=(...)

◆ 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 191 of file numvector.h.

192 {
193 for (size_t i = 0; i < n; ++i)
194 this->data[i] /= c;
195 return *this;
196 }//operator/=(...)

◆ 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 314 of file numvector.h.

315 {
316 for (size_t i = 0; i < n; ++i)
317 if (this->data[i] != y[i])
318 return false;
319 return true;
320 }//operator==(...)

◆ operator[]() [1/2]

template<typename T , size_t n>
T & VMlib::numvector< T, n >::operator[] ( size_t  i)
inline

Definition at line 104 of file numvector.h.

105 {
106 return this->data[i];
107 }

◆ operator[]() [2/2]

template<typename T , size_t n>
const T & VMlib::numvector< T, n >::operator[] ( size_t  i) const
inline

Definition at line 109 of file numvector.h.

110 {
111 return this->data[i];
112 }

◆ operator^() [1/2]

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 161 of file numvector.h.

162 {
163 return (this->data[0] * y[1] - this->data[1] * y[0]);
164 }//operator^(...)

◆ operator^() [2/2]

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 143 of file numvector.h.

144 {
145 numvector<typename std::remove_const<decltype(this->data[1] * y[2])>::type, 3> vec;
146 vec[0] = this->data[1] * y[2] - this->data[2] * y[1];
147 vec[1] = this->data[2] * y[0] - this->data[0] * y[2];
148 vec[2] = this->data[0] * y[1] - this->data[1] * y[0];
149 return vec;
150 }//operator^(...)

◆ proj()

template<typename T , size_t n>
template<typename P = T>
numvector< T, n > VMlib::numvector< T, n >::proj ( const numvector< P, n > &  v)
inline

Проекция вектора на вектор v.

Template Parameters
Tтип данных компонент вектора
Pтип данных константы
nдлина вектора
vвектор, на который проецируем
Returns
результирующий вектор

Definition at line 546 of file numvector.h.

547 {
548 numvector<T, n> res;
549 res = ((*this & v) / (v & v))* v;
550
551 return res;
552 }

◆ rotateLeft()

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 484 of file numvector.h.

485 {
486 if (k > n)
487 throw;
488
489 if (k == n)
490 return *this;
491
492 numvector<T, n> res;
493
494 //for (size_t i = 0; i < n; ++i)
495 // res[i] = r[(i + k) % n];
496
497 for (size_t i = 0; i < n - k; ++i)
498 res[i] = this->data[i + k];
499 for (size_t i = n - k; i < n; ++i)
500 res[i] = this->data[i + k - n];
501 return res;
502 }//rotateLeft(...)

◆ size()

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

Definition at line 114 of file numvector.h.

115 {
116 return n;
117 }
Here is the caller graph for this function:

◆ toZero()

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 530 of file numvector.h.

531 {
532 for (size_t i = 0; i < n; ++i)
533 this->data[i] = val;
534 return *this;
535 }
Here is the caller graph for this function:

◆ unit()

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 405 of file numvector.h.

406 {
407 auto ilen = static_cast<decltype(this->data[0] * newlen)>(newlen / std::max(this->length(), 1e-16));
408 return (*this * ilen);
409 }//unit(...)
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ data

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

Definition at line 101 of file numvector.h.


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