什么是运营商|对boost :: la中的vec3做什么?

时间:2015-04-05 09:03:48

标签: boost

我试图了解这段代码是如何工作的。这里,正在定义向量theta,然后用它来计算旋转矩阵。

我无法弄清楚theta|Z语法的工作原理。我的猜测是它像theta.z那样 - 但我无法确定升压源的哪一部分正在做这件事。这是标准的增强语法吗?

此处的提升源位于:http://ci.boost.org/svn-trac/browser/sandbox/la/boost/la

任何关于此的提示/线索都将受到赞赏。

#include <boost/la/all.hpp>
using namespace boost::la;
typedef vec<double, 2> vec2;
typedef vec<double, 3> vec3;
typedef vec<double, 33> mat33;

// Actual code
vec3 *theta = ...
mat33 R = rotz_matrix<3>(-*theta|Z) * roty_matrix<3>(*theta|X) * rotx_matrix<3>(*theta|Y);

1 个答案:

答案 0 :(得分:1)

typedef vec<double, 33> mat33;

vec是http://ci.boost.org/svn-trac/browser/sandbox/la/boost/la/vec.hpp

中定义的自定义结构

从那里的代码:

template <class T,int D>
                struct
                vec
                        {
                        T a[D];

所以T =类型的双倍    维度D = 33

vec表示33个双打的向量。它似乎被称为矩阵,其中包含总共33个元素。

// Actual code
mat33 R = rotz_matrix<3>(-*theta|Z) * roty_matrix<3>(*theta|X) * rotx_matrix<3>(*theta|Y);

我仍然想弄明白。 rotz_matrix()声明在哪里?