Commit 0f14d06f by Maarten L. Hekkelman

Added inverse symmetry operation

parents a38f31ce c53be784
......@@ -67,6 +67,16 @@ class matrix_expression
}
}
void swap_col(uint32_t c1, uint32_t c2)
{
for (uint32_t r = 0; r < dim_n(); ++r)
{
auto &a = operator()(r, c1);
auto &b = operator()(r, c2);
std::swap(a, b);
}
}
friend std::ostream &operator<<(std::ostream &os, const matrix_expression &m)
{
os << '[';
......@@ -585,7 +595,7 @@ auto eigen(const matrix_expression<M> &mat, bool sort)
j = q;
std::swap(ev[j], ev[p]);
em.swap_row(j, p);
em.swap_col(j, p);
}
}
......
......@@ -280,11 +280,17 @@ quaternion align_points(const std::vector<point> &pa, const std::vector<point> &
auto cf = matrix_cofactors(t);
int maxR = 0;
double maxCF = std::abs(cf(0, 0));
for (int r = 1; r < 4; ++r)
{
if (std::abs(cf(r, 0)) > std::abs(cf(maxR, 0)))
auto cfr = std::abs(cf(r, 0));
if (maxCF < cfr)
{
maxCF = cfr;
maxR = r;
}
}
quaternion q(
static_cast<float>(cf(maxR, 0)),
......
......@@ -412,4 +412,24 @@ BOOST_AUTO_TEST_CASE(eigen_1, *utf::tolerance(0.1f))
BOOST_TEST(ev[1] == 1.4780548447781369f);
BOOST_TEST(ev[2] == 37.1014913651276582f);
BOOST_TEST(ev[3] == 2585.25381092892231f);
BOOST_TEST(em(0, 0) == 0.792608291163763585f);
BOOST_TEST(em(1, 0) == 0.451923120901599794f);
BOOST_TEST(em(2, 0) == 0.322416398581824992f);
BOOST_TEST(em(3, 0) == 0.252161169688241933f);
BOOST_TEST(em(0, 1) == -0.582075699497237650f);
BOOST_TEST(em(1, 1) == 0.370502185067093058f);
BOOST_TEST(em(2, 1) == 0.509578634501799626f);
BOOST_TEST(em(3, 1) == 0.514048272222164294f);
// BOOST_TEST(em(0, 2) == -0.179186290535454826f);
// BOOST_TEST(em(1, 2) == 0.741917790628453435f);
// BOOST_TEST(em(2, 2) == -0.100228136947192199f);
// BOOST_TEST(em(3, 2) == -0.638282528193614892f);
BOOST_TEST(em(0, 3) == 0.0291933231647860588f);
BOOST_TEST(em(1, 3) == -0.328712055763188997f);
BOOST_TEST(em(2, 3) == 0.791411145833126331f);
BOOST_TEST(em(3, 3) == -0.514552749997152907f);
}
\ No newline at end of file
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