获得所有旋转和反射矩阵组合的最便宜方法是什么?

问题描述

我正在使用特征值,我想知道最便宜的方法是获得所有旋转矩阵和反射矩阵的组合。让我们有一个像这样的矩阵:

1 2
4 3

我想要所有旋转矩阵:

1 2
4 3
---------
4 1
3 2
---------
3 4
2 1
---------
2 3
1 4

反映:

1 4
2 3
---------
4 3
1 2
---------
3 2
4 1
---------
2 1
3 4
---------

解决方法

您可以使用A.rowwise().reverse()进行水平翻转,使用A.colwise().reverse()进行垂直翻转,并使用A.transpose()在主对角线上翻转。 A.reverse()旋转180度,通过以上各项的组合,其他所有操作都可以实现:

Eigen::Matrix2i A; A << 1,2,4,3;

std::cout << "Original:\n" << A << '\n';
std::cout << "Rot 90:\n" << A.transpose().colwise().reverse() << '\n';
std::cout << "Rot 180:\n" << A.reverse() << '\n';
std::cout << "Rot 270:\n" << A.transpose().rowwise().reverse() << '\n';


std::cout << "Flip horizontal:\n" << A.rowwise().reverse() << '\n';
std::cout << "Flip vertical:\n" << A.colwise().reverse() << '\n';
std::cout << "Flip main diag:\n" << A.transpose() << '\n';
std::cout << "Flip side diag:\n" << A.transpose().reverse() << '\n';

通过优化进行编译时,所有这些函数的成本均为零,即它们只是在基础矩阵上创建视图。