Commit 87888984 authored by Vadim Pisarevsky's avatar Vadim Pisarevsky

added Matx<4,4>*Scalar operator (ticket #1830)

parent ed1932df
...@@ -680,7 +680,16 @@ Matx<_Tp, 4, 1> operator * (const Matx<_Tp, 4, 4>& a, const Point3_<_Tp>& b) ...@@ -680,7 +680,16 @@ Matx<_Tp, 4, 1> operator * (const Matx<_Tp, 4, 4>& a, const Point3_<_Tp>& b)
template<typename _Tp> static inline template<typename _Tp> static inline
Scalar operator * (const Matx<_Tp, 4, 4>& a, const Scalar& b) Scalar operator * (const Matx<_Tp, 4, 4>& a, const Scalar& b)
{ {
return Scalar(a*Matx<_Tp, 4, 1>(b[0],b[1],b[2],b[3])); Matx<double, 4, 1> c(Matx<double, 4, 4>(a), b, Matx_MatMulOp());
return reinterpret_cast<const Scalar&>(c);
}
static inline
Scalar operator * (const Matx<double, 4, 4>& a, const Scalar& b)
{
Matx<double, 4, 1> c(a, b, Matx_MatMulOp());
return reinterpret_cast<const Scalar&>(c);
} }
......
...@@ -808,6 +808,22 @@ bool CV_OperationsTest::TestMatxMultiplication() ...@@ -808,6 +808,22 @@ bool CV_OperationsTest::TestMatxMultiplication()
if(res2[0] != 14.0) throw test_excep(); if(res2[0] != 14.0) throw test_excep();
if(res2[1] != 6.0) throw test_excep(); if(res2[1] != 6.0) throw test_excep();
if(res2[2] != 1.0) throw test_excep(); if(res2[2] != 1.0) throw test_excep();
Matx44f mat44f(1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1);
Matx44d mat44d(1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1);
Scalar s(4, 3, 2, 1);
Scalar sf = mat44f*s;
Scalar sd = mat44d*s;
if(sf[0] != 10.0) throw test_excep();
if(sf[1] != 6.0) throw test_excep();
if(sf[2] != 3.0) throw test_excep();
if(sf[3] != 1.0) throw test_excep();
if(sd[0] != 10.0) throw test_excep();
if(sd[1] != 6.0) throw test_excep();
if(sd[2] != 3.0) throw test_excep();
if(sd[3] != 1.0) throw test_excep();
} }
catch(const test_excep&) catch(const test_excep&)
{ {
......
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