addressed review comments
parent
eda6bf5ffe
commit
56787e1a88
|
|
@ -17,14 +17,23 @@ namespace traits {
|
||||||
|
|
||||||
template <class Manifold>
|
template <class Manifold>
|
||||||
struct TangentVector {
|
struct TangentVector {
|
||||||
typedef Eigen::VectorXd type;
|
//typedef XXX type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// used to identify the manifold associated with a chart
|
||||||
template <class Chart>
|
template <class Chart>
|
||||||
struct Manifold {
|
struct Manifold {
|
||||||
typedef Chart::value_type type;
|
//typedef XXX type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <class Manifold>
|
||||||
|
struct DefaultChart {
|
||||||
|
//typedef XXX type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class Group>
|
||||||
|
struct group_flavor {};
|
||||||
|
|
||||||
struct additive_group_tag {};
|
struct additive_group_tag {};
|
||||||
struct multiplicative_group_tag {};
|
struct multiplicative_group_tag {};
|
||||||
|
|
||||||
|
|
@ -35,20 +44,16 @@ class ManifoldConcept {
|
||||||
public:
|
public:
|
||||||
typedef T Manifold;
|
typedef T Manifold;
|
||||||
typedef traits::TangentVector<T>::type TangentVector;
|
typedef traits::TangentVector<T>::type TangentVector;
|
||||||
typedef traits::DefaultChart<T> DefaultChart;
|
typedef traits::DefaultChart<T>::type DefaultChart;
|
||||||
static const size_t dim = traits::dimension<T>::value;
|
static const size_t dim = traits::dimension<T>::value;
|
||||||
|
|
||||||
BOOST_CONCEPT_USAGE(ManifoldConcept) {
|
BOOST_CONCEPT_USAGE(ManifoldConcept) {
|
||||||
|
|
||||||
// assignable
|
|
||||||
T t2 = t;
|
|
||||||
|
|
||||||
TangentVector v;
|
|
||||||
BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);
|
BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);
|
||||||
|
// no direct usage for manifold since most usage is through a chart
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
Manifold p;
|
Manifold p;
|
||||||
|
TangentVector v;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class C>
|
template<class C>
|
||||||
|
|
@ -87,18 +92,18 @@ class GroupConcept {
|
||||||
return (equal(compose(a, inverse(a)), identity))
|
return (equal(compose(a, inverse(a)), identity))
|
||||||
&& (equal(between(a, b), compose(inverse(a), b)))
|
&& (equal(between(a, b), compose(inverse(a), b)))
|
||||||
&& (equal(compose(a, between(a, b)), b))
|
&& (equal(compose(a, between(a, b)), b))
|
||||||
&& operator_usage(a, b, traits::group_flavor<Group>)
|
&& operator_usage(a, b, traits::group_flavor<Group>);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Group p,q;
|
Group p,q;
|
||||||
|
|
||||||
bool operator_usage(const Group& a, const Group& b, const traits::multiplicative_group_tag&) {
|
bool operator_usage(const Group& a, const Group& b, const traits::multiplicative_group_tag&) {
|
||||||
return equals(compose(a, b), a*b);
|
return equal(compose(a, b), a*b);
|
||||||
|
|
||||||
}
|
}
|
||||||
bool operator_usage(const Group& a, const Group& b, const traits::additive_group_tag&) {
|
bool operator_usage(const Group& a, const Group& b, const traits::additive_group_tag&) {
|
||||||
return equals(compose(a, b), a+b);
|
return equal(compose(a, b), a+b);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue