QVM: Quaternions, Vectors, Matrices
Questions and Answers
Q: Какова мотивация Boost QVM? Почему бы просто не использовать uBLAS/Eigen/CML/GLM/etc?
A: Основной областью Boost QVM являются графические и имитационные приложения в реальном времени, поэтому это не полная библиотека линейной алгебры. В то время как (естественно) существует некоторое совпадение с такими библиотеками, QVM делает акцент на 2, 3 и 4-мерных операциях с нулевыми накладными расходами (отсюда специфические для домена функции, такие как Swizzling).
Q: Как шаблон qvm::vec (или qvm::mat, или qvm::quat) сравнивается с векторными типами из других библиотек?
A: Шаблон qvm::vec никоим образом не является центральным для векторных операций, определенных QVM. Операции предназначены для работы с любым типом вектора, определяемым пользователем, или с типами векторов 3-й стороны (например, D3DVECTOR), в то время как шаблон qvm::vec является просто типом возврата по умолчанию для выражений, которые используют аргументы различных типов, которые были бы несовместимы за пределами QVM. Например, если deduce_mat2 не был специализирован, вызов cross с определяемым пользователем типом vec3 и определяемым пользователем типом float3 возвращает qvm::vec.
Q: Почему QVM не использует [] или () для доступа к векторным и матричным элементам?
A: Потому что он предназначен для работы с определенными пользователями типами, а стандарт C++ требует, чтобы эти операторы были членами. Конечно, если определяемый пользователем тип определяет оператор [] или оператор(), они доступны для использования с другими функциями QVM, но QVM определяет свой собственный механизм доступа к векторным элементам , а также Swizzling.