20 #ifndef _ROTATION_ABOUT_FIXED_AXIS_H_
21 #define _ROTATION_ABOUT_FIXED_AXIS_H_
23 #include "mbsim/functions/function.h"
36 int getArgSize()
const {
return 1; }
37 fmatvec::RotMat3 operator()(
const Arg &q) {
39 const double cosq=cos(alpha);
40 const double sinq=sin(alpha);
41 const double onemcosq=1-cosq;
42 const double a0a1=a.e(0)*a.e(1);
43 const double a0a2=a.e(0)*a.e(2);
44 const double a1a2=a.e(1)*a.e(2);
45 A.e(0,0) = cosq+onemcosq*a.e(0)*a.e(0);
46 A.e(1,0) = onemcosq*a0a1+a.e(2)*sinq;
47 A.e(2,0) = onemcosq*a0a2-a.e(1)*sinq;
48 A.e(0,1) = onemcosq*a0a1-a.e(2)*sinq;
49 A.e(1,1) = cosq+onemcosq*a.e(1)*a.e(1);
50 A.e(2,1) = onemcosq*a1a2+a.e(0)*sinq;
51 A.e(0,2) = onemcosq*a0a2+a.e(1)*sinq;
52 A.e(1,2) = onemcosq*a1a2-a.e(0)*sinq;
53 A.e(2,2) = cosq+onemcosq*a.e(2)*a.e(2);
56 typename B::DRetDArg parDer(
const Arg &q) {
return a; }
57 typename B::DRetDArg parDerDirDer(
const Arg &qd,
const Arg &q) {
return typename B::DRetDArg(1); }
58 typename B::DDRetDDArg parDerParDer(
const Arg &arg) { THROW_MBSIMERROR(
"parDerParDer is not available for given template parameters."); }
59 bool constParDer()
const {
return true; }
60 const fmatvec::Vec3& getAxisOfRotation()
const {
return a; }
61 void setAxisOfRotation(
const fmatvec::Vec3 &a_) { a = a_; }
62 void initializeUsingXML(xercesc::DOMElement *element) {
63 xercesc::DOMElement *e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"axisOfRotation");
Definition: rotation_about_fixed_axis.h:28
Definition: planar_contour.h:31