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

What is the cheapest ways to get the combinations of all rotated and reflected matrices?

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

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';

当使用优化编译时,所有这些函数都是零成本,即它们只是在底层矩阵上创建一个视图。