Missing operators for SkewSymmetricMatrix3
Summary
Working with SkewSymmetricMatrix3 shows that some operators are not implemented yet.
Environment
- Operating System : Linux
- Architecture : x64
- Eigen Version : master
- Compiler Version : Gcc11.4
Minimal Example
The following code (godbolt) works as expected but requires the usage of .toDenseMatrix() in many places due to missing implementation of operations.
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
Matrix3d A = Matrix3d::Random();
Vector3d b = Vector3d::Random();
// error: no match for ‘operator-’ (operand types are ‘Eigen::Matrix3d’ {aka ‘Eigen::Matrix<double, 3, 3>’} and ‘Eigen::SkewSymmetricMatrix3<double>’)
// Matrix3d c1 = A - SkewSymmetricMatrix3<double>(A * b);
Matrix3d c1 = A - SkewSymmetricMatrix3<double>(A * b).toDenseMatrix();
// error: no match for ‘operator-’ (operand types are ‘const Eigen::Product<Eigen::Matrix<double, 3, 3>, Eigen::SkewSymmetricMatrix3<double>, 1>’ and ‘Eigen::SkewSymmetricMatrix3<double>’)
// Matrix3d c2 = A * SkewSymmetricMatrix3<double>(b)
// - SkewSymmetricMatrix3<double>(A * b);
Matrix3d c2 = A * SkewSymmetricMatrix3<double>(b)
- SkewSymmetricMatrix3<double>(A * b).toDenseMatrix();
// error: no match for ‘operator-’ (operand types are ‘Eigen::Product<Eigen::SkewSymmetricMatrix3<double>, Eigen::Matrix<double, 3, 3>, 1>’ and ‘Eigen::SkewSymmetricMatrix3<double>’)
// Matrix3d c3 = SkewSymmetricMatrix3<double>(b) * A
// - SkewSymmetricMatrix3<double>(A * b);
Matrix3d c3 = SkewSymmetricMatrix3<double>(b) * A
- SkewSymmetricMatrix3<double>(A * b).toDenseMatrix();
}
Steps to reproduce
Trying to compile the expressions without .toDenseMatrix() leads to a compilation error.
What is the current bug behavior?
Important operators are not implemented:
- error: no match for ‘operator-’ (operand types are ‘Eigen::Matrix3d’ {aka ‘Eigen::Matrix<double, 3, 3>’} and ‘Eigen::SkewSymmetricMatrix3’)
- error: no match for ‘operator-’ (operand types are ‘const Eigen::Product<Eigen::Matrix<double, 3, 3>, Eigen::SkewSymmetricMatrix3, 1>’ and ‘Eigen::SkewSymmetricMatrix3’)
- error: no match for ‘operator-’ (operand types are ‘Eigen::Product<Eigen::SkewSymmetricMatrix3, Eigen::Matrix<double, 3, 3>, 1>’ and ‘Eigen::SkewSymmetricMatrix3’)
What is the expected correct behavior?
The simple expressions should compile without using .toDenseMatrix().