$extrastylesheet
Olena  User documentation 2.1
An Image Processing Platform
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
algebra/h_mat.cc
1 // Copyright (C) 2007, 2009, 2012 EPITA Research and Development
2 // Laboratory (LRDE)
3 //
4 // This file is part of Olena.
5 //
6 // Olena is free software: you can redistribute it and/or modify it under
7 // the terms of the GNU General Public License as published by the Free
8 // Software Foundation, version 2 of the License.
9 //
10 // Olena is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with Olena. If not, see <http://www.gnu.org/licenses/>.
17 //
18 // As a special exception, you may use this file as part of a free
19 // software project without restriction. Specifically, if other files
20 // instantiate templates or use macros or inline functions from this
21 // file, or you compile this file and link it with other files to produce
22 // an executable, this file does not by itself cause the resulting
23 // executable to be covered by the GNU General Public License. This
24 // exception does not however invalidate any other reasons why the
25 // executable file might be covered by the GNU General Public License.
26 
27 #include <mln/fun/i2v/all_to.hh>
28 #include <mln/algebra/mat.hh>
29 #include <mln/algebra/h_mat.hh>
30 #include <mln/make/h_mat.hh>
31 
32 
33 template <typename T>
34 bool about_equal(const T& f, const T& q)
35 {
36  return mln::math::abs(q - f) <= 0.000001;
37 }
38 
39 
40 int main()
41 {
42  using namespace mln;
43 
44  // Reading in h_mat.
46  for (int i = 0; i < 4; ++i)
47  for (int j = 0; j < 4; ++j)
48  mln_assertion(hm2(i, j) == 2.5f);
49 
50  // Conversion from mat to h_mat
53  mln_assertion(m2.size() == hm1.size());
54  for (int i = 0; i < 2; ++i)
55  for (int j = 0; j < 2; ++j)
56  mln_assertion(m2(i, j) == hm1(i, j));
57 
58  // Conversion from h_mat to mat.
60  algebra::mat<4,4,float> m4 = hm3;
61  mln_assertion(m4.size() == hm3.size());
62  for (int i = 0; i < 4; ++i)
63  for (int j = 0; j < 4; ++j)
64  mln_assertion(m4(i, j) == hm3(i, j));
65 
66 
67  // Check from_to_ overloads.
68  {
69  algebra::quat q_ref(0.92388, 0.186238, 0.310397, 0.124159);
70  double vals[9] = { 0.776477, -0.113801, 0.619785,
71  0.345031, 0.8998, -0.267046,
72  -0.527293, 0.4212, 0.737938 };
74  algebra::quat q2;
75  algebra::from_to_(m, q2);
76 
77  for (int i = 0; i < 4; ++i)
78  mln_assertion(about_equal(q_ref.to_vec()[i], q2.to_vec()[i]));
79  }
80 
81 }