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 ()=default
 Пустой конструктор
 
template<typename P >
 numvector (const P c)
 Конструктор, инициализирующий весь вектор одной и той же константой
 
 numvector (const numvector< T, n > &vec)
 Нешаблонный конструктор копирования
 
template<typename P >
 numvector (const numvector< P, n > &vec)
 Шаблонный конструктор копирования
 
numvector< T, n > & operator= (const numvector< T, n > &vec)
 Нешаблонный оператор копирования
 
template<typename P >
numvector< T, n > operator= (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 ( )
default

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

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

588 {
589 for (size_t i = 0; i < n; ++i)
590 this->data[i] = c;
591 }//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 600 of file numvector.h.

601 {
602 //for (size_t i = 0; i < n; ++i)
603 // r[i] = vec[i];
604 memcpy(this->data, vec.data, n * sizeof(T));
605 }//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 614 of file numvector.h.

615 {
616 for (size_t i = 0; i < n; ++i)
617 this->data[i] = vec[i];
618 }//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 656 of file numvector.h.

657 {
658 if (vec.size() != n)
659 throw;
660 for (size_t i = 0; i < n; ++i)
661 this->data[i] = vec[i];
662 }//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 672 of file numvector.h.

673 {
674 if (z.size() != n)
675 throw;
676 for (size_t i = 0; i < n; ++i)
677 this->data[i] = *(z.begin() + i);
678 }//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 689 of file numvector.h.

690 {
691 if (z.size() != n)
692 throw;
693 for (size_t i = 0; i < n; ++i)
694 this->data[i] = *(z.begin() + i);
695 }//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 709 of file numvector.h.

710 {
711 size_t minPN = (p < n) ? p : n;
712 for (size_t i = 0; i < minPN; ++i)
713 this->data[i] = vec[i];
714 for (size_t i = minPN; i < n; ++i)
715 this->data[i] = add;
716 }//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 558 of file numvector.h.

559 {
560 return (*this - y).length2();
561 }//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 571 of file numvector.h.

572 {
573 R res = (*this - y) & (*this - y);
574 return sqrt(res);
575 }//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 510 of file numvector.h.

511 {
512 numvector<T, 2> res;
513 res[0] = -this->data[1];
514 res[1] = this->data[0];
515 return res;
516 }//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 374 of file numvector.h.

375 {
376 P res = *this & *this;
377 return sqrt(res);
378 }//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 386 of file numvector.h.

387 {
388 return (*this & *this);
389 }//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 433 of file numvector.h.

434 {
435 for (size_t i = 0; i < n; ++i)
436 if (this->data[i] == s)
437 return i;
438
439 return static_cast<size_t>(-1);
440 }//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 340 of file numvector.h.

341 {
342 typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type res = 0;
343 for (size_t i = 0; i < n; ++i)
344 res += abs(this->data[i]);
345 return res;
346 }//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 419 of file numvector.h.

420 {
421 auto ilen = static_cast<decltype(this->data[0] * newlen)>(newlen / std::max(this->length(), 1e-16));
422 *this *= ilen;
423 }//normalize(...)
P length() const
Вычисление 2-нормы (длины) вектора
Definition numvector.h:374
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 354 of file numvector.h.

355 {
356 typename std::remove_const<typename std::remove_reference<decltype(this->data[0])>::type>::type res = 0;
357 for (size_t i = 0; i < n; ++i)
358 {
359 if (abs(this->data[i]) > res)
360 res = abs(this->data[i]);
361 }
362 return res;
363 }//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 449 of file numvector.h.

450 {
451 std::set<P> newset;
452 for (size_t i = 0; i < n; ++i)
453 newset.insert(this->data[i]);
454 return newset;
455 }//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 463 of file numvector.h.

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

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

328 {
329 return !(*this == y);
330 }//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 270 of file numvector.h.

271 {
272 numvector<typename std::remove_const<decltype(this->data[0] * c)>::type, n> res;
273 for (size_t i = 0; i < n; ++i)
274 res[i] = c * this->data[i];
275 return res;
276 }//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 298 of file numvector.h.

299 {
300 return *this;
301 }//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 284 of file numvector.h.

285 {
286 numvector<T, n> res;
287 for (size_t i = 0; i < n; ++i)
288 res[i] = -this->data[i];
289 return res;
290 }//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 res[i] = this->data[i] - y[i];
259 return res;
260 }//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=() [1/2]

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

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

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

Definition at line 641 of file numvector.h.

642 {
643 for (size_t i = 0; i < n; ++i)
644 this->data[i] = vec[i];
645 }//numvector(...)

◆ operator=() [2/2]

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

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

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

Definition at line 626 of file numvector.h.

627 {
628 //for (size_t i = 0; i < n; ++i)
629 // r[i] = vec[i];
630 memcpy(this->data, vec.data, n * sizeof(T));
631 return *this;
632 }//numvector(...)

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

312 {
313 for (size_t i = 0; i < n; ++i)
314 if (this->data[i] != y[i])
315 return false;
316 return true;
317 }//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 543 of file numvector.h.

544 {
545 numvector<T, n> res;
546 res = ((*this & v) / (v & v))* v;
547
548 return res;
549 }

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

482 {
483 if (k > n)
484 throw;
485
486 if (k == n)
487 return *this;
488
489 numvector<T, n> res;
490
491 //for (size_t i = 0; i < n; ++i)
492 // res[i] = r[(i + k) % n];
493
494 for (size_t i = 0; i < n - k; ++i)
495 res[i] = this->data[i + k];
496 for (size_t i = n - k; i < n; ++i)
497 res[i] = this->data[i + k - n];
498 return res;
499 }//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 527 of file numvector.h.

528 {
529 for (size_t i = 0; i < n; ++i)
530 this->data[i] = val;
531 return *this;
532 }
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 402 of file numvector.h.

403 {
404 auto ilen = static_cast<decltype(this->data[0] * newlen)>(newlen / std::max(this->length(), 1e-16));
405 return (*this * ilen);
406 }//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: