28 FORCE_TYPEDEF_TPL(Derived);
36 using Base::operator=;
52 bool isEqual_impl(
const ForceDense<D2> & other)
const 60 return other.derived() == derived();
65 Derived & operator=(
const ForceDense<D2> & other)
67 return derived().set(other.derived());
70 Derived & operator=(
const ForceDense & other)
72 return derived().set(other.derived());
76 Derived & set(
const ForceDense<D2> & other)
84 Derived & operator=(
const Eigen::MatrixBase<V6> & v)
86 EIGEN_STATIC_ASSERT_VECTOR_ONLY(V6);
87 assert(v.size() == 6);
88 linear() = v.template segment<3>(LINEAR);
89 angular() = v.template segment<3>(ANGULAR);
95 return derived().__opposite__();
98 ForcePlain operator+(
const ForceDense<F1> & f)
const 100 return derived().__plus__(f.derived());
102 template<
typename F1>
105 return derived().__minus__(f.derived());
108 template<
typename F1>
109 Derived & operator+=(
const ForceDense<F1> & f)
111 return derived().__pequ__(f.derived());
113 template<
typename F1>
116 f.derived().addTo(derived());
120 template<
typename M1>
121 Derived & operator-=(
const ForceDense<M1> & v)
123 return derived().__mequ__(v.derived());
131 template<
typename M1>
132 ForcePlain __plus__(
const ForceDense<M1> & v)
const 137 template<
typename M1>
138 ForcePlain __minus__(
const ForceDense<M1> & v)
const 143 template<
typename M1>
144 Derived & __pequ__(
const ForceDense<M1> & v)
151 template<
typename M1>
152 Derived & __mequ__(
const ForceDense<M1> & v)
159 template<
typename OtherScalar>
160 ForcePlain __mult__(
const OtherScalar & alpha)
const 165 template<
typename OtherScalar>
166 ForcePlain __div__(
const OtherScalar & alpha)
const 168 return derived().__mult__((OtherScalar)(1) / alpha);
171 template<
typename F1>
174 return phi.linear().dot(
linear()) + phi.angular().dot(
angular());
177 template<
typename M1,
typename M2>
178 void motionAction(
const MotionDense<M1> & v, ForceDense<M2> & fout)
const 184 template<
typename M1>
188 motionAction(v, res);
192 template<
typename M2>
194 const ForceDense<M2> & f,
195 const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
const 197 return derived().isApprox_impl(f, prec);
200 template<
typename D2>
202 const ForceDense<D2> & f,
203 const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
const 208 bool isZero_impl(
const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
const 213 template<
typename S2,
int O2,
typename D2>
214 void se3Action_impl(
const SE3Tpl<S2, O2> & m, ForceDense<D2> & f)
const 221 template<
typename S2,
int O2>
225 se3Action_impl(m, res);
229 template<
typename S2,
int O2,
typename D2>
230 void se3ActionInverse_impl(
const SE3Tpl<S2, O2> & m, ForceDense<D2> & f)
const 232 f.
linear().noalias() = m.rotation().transpose() *
linear();
234 m.rotation().transpose() * (
angular() - m.translation().cross(
linear()));
237 template<
typename S2,
int O2>
241 se3ActionInverse_impl(m, res);
245 void disp_impl(std::ostream & os)
const 247 os <<
" f = " <<
linear().transpose() << std::endl
248 <<
"tau = " <<
angular().transpose() << std::endl;
254 return derived().ref();
260 ForceDense(
const ForceDense &) =
delete;