Написал c++ библиотеку для векторной математики

Oct 21, 2012 01:56

В процессе работы нарисовалась библиотека для векторно-матричной математики.

Общая идея библиотеки заключалась в том, чтобы можно было оперировать векторами и матрицами в 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 ее засабмитить :)

программизм, c++

Previous post
Up