added "Matx*Vec -> Vec" operator (ticket #1830)
This commit is contained in:
parent
476c453ef6
commit
75b1788c6b
@ -638,6 +638,14 @@ Matx<_Tp, m, n> operator * (const Matx<_Tp, m, l>& a, const Matx<_Tp, l, n>& b)
|
||||
}
|
||||
|
||||
|
||||
template<typename _Tp, int m, int n> static inline
|
||||
Vec<_Tp, m> operator * (const Matx<_Tp, m, n>& a, const Vec<_Tp, n>& b)
|
||||
{
|
||||
Matx<_Tp, m, 1> c(a, b, Matx_MatMulOp());
|
||||
return reinterpret_cast<const Vec<_Tp, m>&>(c);
|
||||
}
|
||||
|
||||
|
||||
template<typename _Tp> static inline
|
||||
Point_<_Tp> operator * (const Matx<_Tp, 2, 2>& a, const Point_<_Tp>& b)
|
||||
{
|
||||
|
@ -754,12 +754,19 @@ bool CV_OperationsTest::TestMatxMultiplication()
|
||||
{
|
||||
try
|
||||
{
|
||||
Matx33f mat(1, 0, 0, 0, 1, 0, 0, 0, 1); // Identity matrix
|
||||
Matx33f mat(1, 1, 1, 0, 1, 1, 0, 0, 1); // Identity matrix
|
||||
Point2f pt(3, 4);
|
||||
Point3f res = mat * pt; // Correctly assumes homogeneous coordinates
|
||||
if(res.x != 3.0) throw test_excep();
|
||||
if(res.y != 4.0) throw test_excep();
|
||||
if(res.z != 1.0) throw test_excep();
|
||||
|
||||
Vec3f res2 = mat*Vec3f(res.x, res.y, res.z);
|
||||
|
||||
if(res.x != 8.0) throw test_excep();
|
||||
if(res.y != 5.0) throw test_excep();
|
||||
if(res.z != 1.0) throw test_excep();
|
||||
|
||||
if(res2[0] != 14.0) throw test_excep();
|
||||
if(res2[1] != 6.0) throw test_excep();
|
||||
if(res2[2] != 1.0) throw test_excep();
|
||||
}
|
||||
catch(const test_excep&)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user