获得所有旋转和反射矩阵组合的最便宜的方法是什么?
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';
当使用优化编译时,所有这些函数都是零成本,即它们只是在底层矩阵上创建一个视图。
我正在使用 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';
当使用优化编译时,所有这些函数都是零成本,即它们只是在底层矩阵上创建一个视图。