20#ifndef _LINEAR_TRANSLATION_H_
21#define _LINEAR_TRANSLATION_H_
23#include "mbsim/functions/function.h"
24#include "mbsim/utils/utils.h"
30 using B = fmatvec::Function<fmatvec::Vec3(Arg)>;
32 typename B::DRetDArg A;
34 fmatvec::Vec3 zeros(
const typename B::DRetDArg &x) {
return fmatvec::Vec3(x.rows()); }
38 LinearTranslation(
const typename B::DRetDArg &A_,
const fmatvec::Vec3 &b_) : A(A_), b(b_) { }
39 void setTranslationVectors(
const typename B::DRetDArg &A_) { A <<= A_; }
40 void setOffset(
const fmatvec::Vec3 &b_) { b <<= b_; }
41 int getArgSize()
const override {
return A.cols(); }
42 fmatvec::Vec3 operator()(
const Arg &arg)
override {
return A*arg+b; }
43 typename B::DRetDArg parDer(
const Arg &arg)
override {
return A; }
44 typename B::DRetDArg parDerDirDer(
const Arg &arg1Dir,
const Arg &arg1)
override {
return typename B::DRetDArg(A.cols()); }
45 bool constParDer()
const override {
return true; }
46 void initializeUsingXML(xercesc::DOMElement *element)
override {
47 xercesc::DOMElement *e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"translationVectors");
48 setTranslationVectors(MBXMLUtils::E(e)->getText<typename B::DRetDArg>());
49 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"offset");
50 if(e) setOffset(MBXMLUtils::E(e)->getText<fmatvec::Vec3>());
Definition: function.h:53
Definition: linear_translation.h:29
namespace MBSim
Definition: bilateral_constraint.cc:30