Commit 2940084e authored by Martin Heistermann's avatar Martin Heistermann

Matrix3x3: support multiplication of vectors of different type.

parent bd0221f6
......@@ -128,20 +128,26 @@ class Matrix3x3T {
}};
}
constexpr Vec3 operator*(const Vec3 &rhs) const {
return Vec3(
template<typename OtherScalar>
constexpr auto operator*(const VectorT<OtherScalar,3> &rhs) const
-> OpenMesh::VectorT<decltype(std::declval<Scalar>() * rhs[0]), 3>
{
return {
(*this)(0, 0) * rhs[0] + (*this)(0, 1) * rhs[1] + (*this)(0, 2) * rhs[2],
(*this)(1, 0) * rhs[0] + (*this)(1, 1) * rhs[1] + (*this)(1, 2) * rhs[2],
(*this)(2, 0) * rhs[0] + (*this)(2, 1) * rhs[1] + (*this)(2, 2) * rhs[2]
);
};
}
constexpr friend Vec3 operator*(Vec3 v, const Matrix3x3T &rhs) {
return Vec3(
template<typename OtherScalar>
constexpr friend auto operator*(VectorT<OtherScalar,3> v, const Matrix3x3T &rhs)
-> OpenMesh::VectorT<decltype(std::declval<Scalar>() * v[0]), 3>
{
return {
rhs(0, 0) * v[0] + rhs(0, 1) * v[1] + rhs(0, 2) * v[2],
rhs(1, 0) * v[0] + rhs(1, 1) * v[1] + rhs(1, 2) * v[2],
rhs(2, 0) * v[0] + rhs(2, 1) * v[1] + rhs(2, 2) * v[2]
);
};
}
constexpr Matrix3x3T operator*(Scalar c) const {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment