1 #define BIORBD_API_EXPORTS
2 #include "Utils/RotoTrans.h"
4 #include "Utils/Error.h"
5 #include "Utils/Vector3d.h"
6 #include "Utils/String.h"
7 #include "Utils/Vector.h"
8 #include "Utils/Rotation.h"
10 #include "RigidBody/NodeSegment.h"
13 const RigidBodyDynamics::Math::Matrix4d& matrix) :
14 RigidBodyDynamics::Math::Matrix4d(matrix)
20 const biorbd::utils::Scalar& v00,
const biorbd::utils::Scalar& v01,
const biorbd::utils::Scalar& v02,
const biorbd::utils::Scalar& v03,
21 const biorbd::utils::Scalar& v10,
const biorbd::utils::Scalar& v11,
const biorbd::utils::Scalar& v12,
const biorbd::utils::Scalar& v13,
22 const biorbd::utils::Scalar& v20,
const biorbd::utils::Scalar& v21,
const biorbd::utils::Scalar& v22,
const biorbd::utils::Scalar& v23,
23 const biorbd::utils::Scalar& v30,
const biorbd::utils::Scalar& v31,
const biorbd::utils::Scalar& v32,
const biorbd::utils::Scalar& v33) :
24 RigidBodyDynamics::Math::Matrix4d (v00, v01, v02, v03,
34 RigidBodyDynamics::Math::Matrix4d(combineRotAndTrans(rot, biorbd::utils::
Vector3d::Zero()))
42 RigidBodyDynamics::Math::Matrix4d(combineRotAndTrans(rot,trans))
51 RigidBodyDynamics::Math::Matrix4d(fromEulerAngles(rotation, translation, rotationSequence))
57 const RigidBodyDynamics::Math::SpatialTransform& st) :
58 RigidBodyDynamics::Math::Matrix4d(fromSpatialTransform(st))
65 const std::pair<biorbd::rigidbody::NodeSegment, biorbd::rigidbody::NodeSegment> &axis1markers,
66 const std::pair<biorbd::rigidbody::NodeSegment, biorbd::rigidbody::NodeSegment> &axis2markers,
67 const std::pair<biorbd::utils::String, biorbd::utils::String>& axesNames,
71 rt_out.block(0, 0, 3, 3) =
Rotation::fromMarkers(axis1markers, axis2markers, axesNames, axisToRecalculate);
72 rt_out.block(0, 3, 3, 1) = origin;
79 idx<=2,
"Axis must be between 0 and 2 included");
80 return static_cast<RigidBodyDynamics::Math::VectorNd
>(rot().block(0,idx,3,1));
86 tp.block(0, 0, 3, 3) = block(0, 0, 3, 3).
transpose();
87 tp.block(0, 3, 3, 1) = -tp.block(0, 0, 3, 3) * block(0, 3, 3, 1);
88 tp.block(3, 0, 1, 4) = RigidBodyDynamics::Math::Vector4d(0, 0, 0, 1).
transpose();
94 return this->block<3, 1>(0,3);
99 return this->block<3, 3>(0,0);
106 out.block(0,0,3,3) = rot;
107 out.block(0,3,3,1) = trans;
108 out.block(3, 0, 1, 4) = RigidBodyDynamics::Math::Vector4d(0, 0, 0, 1).
transpose();
113 const RigidBodyDynamics::Math::SpatialTransform& st)
115 return combineRotAndTrans(st.E,st.r);
127 out.block(0, 0, 3, 3) = rot_mat;
128 out.block(0, 3, 3, 1) = trans;
139 #ifndef BIORBD_USE_CASADI_MATH
143 RigidBodyDynamics::Math::Vector3d v_tp;
145 for (
unsigned int i = 0; i<mToMean.size(); ++i){
146 v_tp += mToMean[i].
trans();
148 v_tp = v_tp/mToMean.size();
151 std::vector<biorbd::utils::Rotation> rotations;
152 for (
unsigned int i=0; i<mToMean.size(); ++i){
153 rotations.push_back(mToMean[i].block<3, 3>(0, 0));
163 RigidBodyDynamics::Math::Vector4d v2;
164 v2.block(0,0,3,1) = v1;
171 #ifndef BIORBD_USE_CASADI_MATH
175 "Last row of the RotoTrans should be (0,0,0,1");
177 "Last row of the RotoTrans should be (0,0,0,1");
184 os << a.block(0,0,4,4);