本文整理汇总了C++中Matrixd::inv方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrixd::inv方法的具体用法?C++ Matrixd::inv怎么用?C++ Matrixd::inv使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrixd
的用法示例。
在下文中一共展示了Matrixd::inv方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ArbitraryRotate
void ArbitraryRotate(Vec3d U, Vec3d V, Vec3d W,
double degreeX, double degreeY,
Vec3d& point, Vec3d aim) {
double cx = cos(Deg2Rad(degreeX));
double sx = sin(Deg2Rad(degreeX));
double cy = cos(Deg2Rad(degreeY));
double sy = sin(Deg2Rad(degreeY));
Matrixd trans = { {1, 0, 0, -aim[0]},
{0, 1, 0, -aim[1]},
{0, 0, 1, -aim[2]},
{0, 0, 0, 1}};
Matrixd mat = { {U[0], U[1], U[2], 0},
{V[0], V[1], V[2], 0},
{W[0], W[1], W[2], 0},
{0, 0, 0, 1}};
Matrixd rot(4, 4);
Matrixd pos = {{point[0]}, {point[1]}, {point[2]}, {1}};
pos = trans * pos;
pos = mat*pos;
rot = {{1, 0, 0, 0},
{0, cx, sx, 0},
{0, -sx, cx, 0},
{0, 0, 0, 1}};
pos = rot*pos;
rot = {{ cy, 0, sy, 0},
{0, 1, 0, 0},
{-sy, 0, cy, 0},
{0, 0, 0, 1}};
pos = rot * pos;
pos = mat.inv()*pos;
pos = trans.inv()*pos;
point = {pos.get(0, 0), pos.get(1, 0), pos.get(2, 0)};
}