Boost logo

Boost :

Subject: Re: [boost] Review Request: QVM (generic Quaternion, Vector and Matrix operations library)
From: Andrew Hundt (athundt_at_[hidden])
Date: 2015-08-03 22:56:23


On Mon, May 4, 2015 at 3:06 PM, Emil Dotchevski <emildotchevski_at_[hidden]>
wrote:

> Boost QVM defines a set of generic functions and operator overloads for
> working with quaternions, vectors and matrices of static size. The library
> also defines vector and matrix data types, however it allows users to
> introduce their own types by specializing the q_traits, v_traits and
> m_traits templates.
>
> Online documentation and a link to download the source code under the Boost
> license is available at http://www.revergestudios.com/boost-qvm/.
>
> I would like to thank Adam Wulkiewicz for volunteering to be the review
> manager for QVM and for his valuable initial feedback.
>
> Thanks,
> Emil Dotchevski
>
> _______________________________________________
> Unsubscribe & other changes:
> http://lists.boost.org/mailman/listinfo.cgi/boost

I was looking at qvm again and I came up with a few additional questions
and thoughts:

Is it possible to specialize operations to use the underlying library's
implementation at no (or minimal) performance cost? For example, if both
matrices in a multiplication are eigen matrices, can the eigen * operator
be used by the Boost.QVM function call internally?

- Are there STL iterator adaptors? (might have missed them)

- Could integration with the basic QVM types for some of the most popular
libraries be included (uBLAS, eigen, armadillo, QMatrix, etc)?

- Have you considered Cube support? (see armadillo for example/explanation
http://arma.sourceforge.net/)

Cubes are a useful alternative to something like a vector of 4x4 homogenous
transforms, particularly when combined with 2d views of the 3d object, or
when you have a number of different matrices with different underlying data
and the same dimensions. For example 3 matrices that hold R,G,B values of
an image, or a dense volumetric representation of the world.

- perhaps a scalar iterator in addition to views? Equivalent to the pixel
iterator in gil
http://www.boost.org/doc/libs/1_58_0/libs/gil/doc/html/gildesignguide.html#PixelIteratorSectionDG
views may simply be superior, however.

Examples that would be useful:

- Basic example that does something interesting, see boost.geometry's
examples for ideas
- Basic example converting between two different underlying library's types
and performing an operation on them
- One liner examples for each of the basic functions, see
http://en.cppreference.com/w/cpp/algorithm/copy for an idea of what I mean
- Tutorial on how to implement your own generic algorithm with the library
with best practices, perhaps SVD
- How to integrate an algorithm provided by a 3rd party library, such
Eigen's SVD implementation
http://eigen.tuxfamily.org/dox/group__SVD__Module.html
- How to extend QVM with a new type, for example, dual quaternions or the
various geometric types that exist in conformal geometric algebra, such as
in versor http://versor.mat.ucsb.edu/#basics

Cheers!
Andrew Hundt


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk