More c++ tags to make code readable when 'Viewing' file

release/4.3a0
dellaert 2014-12-03 22:24:49 +01:00
parent 4458325c17
commit ae64104602
1 changed files with 33 additions and 7 deletions

View File

@ -170,6 +170,8 @@ Manifold Example
An example of implementing a Manifold type is here:
```
#!c++
// GTSAM type
class Rot2 {
typedef Vector2 TangentVector;
@ -204,17 +206,27 @@ An example of implementing a Manifold type is here:
}
}}
```
But Rot2 is in fact also a Lie Group, after we define
```
#!c++
namespace manifold {
Rot2 inverse(const Rot2& p) { return p.transpose();}
Rot2 operator*(const Rot2& p, const Rot2& q) { return p*q;}
Rot2 compose(const Rot2& p, const Rot2& q) { return p*q;}
Rot2 between(const Rot2& p, const Rot2& q) { return inverse(p)*q;}
}
```
The only traits that needs to be implemented are the tags:
namespace gtsam { namespace traits {
```
#!c++
namespace gtsam {
namespace traits {
template<>
struct structure<Rot2> : lie_group_tag {}
@ -222,13 +234,18 @@ The only traits that needs to be implemented are the tags:
template<>
struct group_flavor<Rot2> : multiplicative_group_tag {}
}}
}
}
```
Vector Space Example
--------------------
Providing the Vector space concept is easier:
```
#!c++
// GTSAM type
class Point2 {
static const int dimension = 2;
@ -242,14 +259,17 @@ Providing the Vector space concept is easier:
Rot2 retract(const Vector2& v) const;
}
}
```
The following macro, called inside the gtsam namespace,
DEFINE_VECTOR_SPACE_TRAITS(Point2)
should automatically define
namespace traits {
```
#!c++
namespace traits {
template<>
struct dimension<Point2> {
@ -275,14 +295,19 @@ Providing the Vector space concept is easier:
template<>
struct group_flavor<Point2> : additive_group_tag {}
}
}
```
and
```
#!c++
namespace manifold {
Point2 inverse(const Point2& p) { return -p;}
Point2 operator+(const Point2& p, const Point2& q) { return p+q;}
Point2 compose(const Point2& p, const Point2& q) { return p+q;}
Point2 between(const Point2& p, const Point2& q) { return q-p;}
}
```
Concept Checks
--------------
@ -293,6 +318,7 @@ Boost provides a nice way to check whether a given type satisfies a concept. For
Using the following from Mike Bosse's prototype:
```
#!c++
template<class C>