В процессе работы нарисовалась библиотека для векторно-матричной математики.
Общая идея библиотеки заключалась в том, чтобы можно было оперировать векторами и матрицами в c++ коде наиболее семантически близко к математической нотации. В итоге получилось примерно следующие варианты использования:
#include
#include
typedef math::vector point3d;
typedef math::matrix matrix3x3;
// Конструирование векторов
point3d a {0, 0, 0};
point3d b {1, 1, 1};
// Доступные операции
auto c = a + b; // Сумма векторов (К.О.)
c = a - b; // Разность векторов (К.О.)
c = a * 10; // Умножение вектора на скаляр
c = 10 * b;
c = a / 10; // Деление вектора на скаляр
auto d = a * b; //
Скалярное произведение векторовc = cross(a, b); //
Векторное произведение векторов, определено только для трехмерных векторов.
// Конструирование матриц
matrix3x3 m {
{1, 0, 0},
{0, 1, 0},
{0, 0, 1},
};
matrix3x3 n {
{1, 0, 0},
{0, 1, 0},
{0, 0, 1},
};
c = m * a; // Умножение матрицы на вектор
c = a * m; // Умножение вектора на матрицу
m *= 5; // Умножение матрицы на скаляр. Деление тоже есть.
auto o = m * n; // Умножение матрицы на матрицу. Поддерживается умножение разноразмерных матриц.
o = m + n; // Сложение матриц одинаковой размерности
o = m - n; // Вычитание матриц одинаковой размерности
Ну и прочие мелочи типа нормализации векторов, транспозиции матриц и проч. тоже присутствуют. Думаю, стоит ли эту либу вывести в общий доступ? Например в boost ее засабмитить :)