Geomi
csv.hpp
1 #ifndef DEF_COMMON_CSV
2 #define DEF_COMMON_CSV
3 
4 #include <Eigen/Dense>
5 
6 //#include "../../Space/SO3Group.hpp"
7 //#include "../../Space/SO3Algebra.hpp"
8 //#include "Common_NOXVector.hpp"
9 
10 template <typename T>
11 std::string
12 csvString (const T f, const std::string sep);
13 
14 template <>
15 std::string
16 csvString (const float f, const std::string sep)
17 {
18  std::ostringstream ss;
19  ss << f;
20  std::string str(ss.str());
21  return str;
22 }
23 
24 template <>
25 std::string
26 csvString (const double f, const std::string sep)
27 {
28  std::ostringstream ss;
29  ss << f;
30  std::string str(ss.str());
31  return str;
32 }
33 
34 template <int N>
35 std::string
36 csvString (const Eigen::Matrix<float,N,1> vec, const std::string sep)
37 {
38  std::ostringstream ss;
39  for (int i=0,r=vec.rows()-1; i<=r; i++) {
40  ss << vec[i];
41  if (i<r)
42  ss << sep;
43  }
44  std::string str(ss.str());
45  return str;
46 }
47 
48 template <>
49 std::string
50 csvString (const Eigen::Matrix<float,2,1> vec, const std::string sep)
51 {
52  std::ostringstream ss;
53  for (int i=0; i<=1; i++) {
54  ss << vec[i];
55  if (i<1)
56  ss << sep;
57  }
58  std::string str(ss.str());
59  return str;
60 }
61 
62 template <>
63 std::string
64 csvString (const SO3::Group<float> q, const std::string sep)
65 {
66  std::ostringstream ss;
67  Eigen::Matrix<float,3,3> m = q.toRotationMatrix();
68  for (int i=0; i<9; i++) {
69  ss << m(i/3,i%3);
70  if (i!=8)
71  ss << sep;
72  }
73  std::string str(ss.str());
74  return str;
75 }
76 
77 template <>
78 std::string
79 csvString (const SO3::Algebra<float> q, const std::string sep)
80 {
81  std::ostringstream ss;
82  Eigen::Matrix<float,3,1> v = q.toVector();
83  for (int i=0; i<3; i++) {
84  ss << v[i];
85  if (i!=2)
86  ss << sep;
87  }
88  std::string str(ss.str());
89  return str;
90 }
91 
92 template <>
93 std::string
94 csvString (const SO3::Group<double> q, const std::string sep)
95 {
96  std::ostringstream ss;
97  Eigen::Matrix<double,3,3> m = q.toRotationMatrix();
98  for (int i=0; i<9; i++) {
99  ss << m(i/3,i%3);
100  if (i!=8)
101  ss << sep;
102  }
103  std::string str(ss.str());
104  return str;
105 }
106 
107 template <>
108 std::string
109 csvString (const SO3::Algebra<double> q, const std::string sep)
110 {
111  std::ostringstream ss;
112  Eigen::Matrix<double,3,1> v = q.toVector();
113  for (int i=0; i<3; i++) {
114  ss << v[i];
115  if (i!=2)
116  ss << sep;
117  }
118  std::string str(ss.str());
119  return str;
120 }
121 
122 template <int N>
123 std::string
124 csvString (const NOXVector<N> vec, const std::string sep)
125 {
126  std::ostringstream ss;
127  for (int i=0,r=vec.size()-1; i<=r; i++) {
128  ss << vec[i];
129  if (i<r)
130  ss << sep;
131  }
132  std::string str(ss.str());
133  return str;
134 }
135 
136 template <>
137 std::string
138 csvString (const NOXVector<2> vec, const std::string sep)
139 {
140  std::ostringstream ss;
141  for (int i=0,r=2; i<=r; i++) {
142  ss << vec[i];
143  if (i<r)
144  ss << sep;
145  }
146  std::string str(ss.str());
147  return str;
148 }
149 
150 template <>
151 std::string
152 csvString (const NOXVector<3> vec, const std::string sep)
153 {
154  std::ostringstream ss;
155  for (int i=0,r=2; i<=r; i++) {
156  ss << vec[i];
157  if (i<r)
158  ss << sep;
159  }
160  std::string str(ss.str());
161  return str;
162 }
163 
164 template <>
165 std::string
166 csvString (const NOXVector<6> vec, const std::string sep)
167 {
168  std::ostringstream ss;
169  for (int i=0,r=5; i<=r; i++) {
170  ss << vec[i];
171  if (i<r)
172  ss << sep;
173  }
174  std::string str(ss.str());
175  return str;
176 }
177 
178 #endif
Eigen::Matrix< T_SCALAR_TYPE, 3, 3 > toRotationMatrix() const
Definition: SO3_Group.hpp:169
Definition: SO3_Group.hpp:17
Definition: SO3_Algebra.hpp:23
Definition: NOXVector.hpp:14