24 CPPUNIT_ASSERT(Eigen::Map<Eigen::Matrix3d>(I0.
data).isZero());
26 CPPUNIT_ASSERT(Eigen::Map<Eigen::Matrix3d>(I1.data).isZero());
27 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I0.
data)-Eigen::Map<Eigen::Matrix3d>(I1.data)).isZero());
32 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I3.
data)-Eigen::Map<Eigen::Matrix3d>(I2.data)).isZero());
34 CPPUNIT_ASSERT(!(Eigen::Map<Eigen::Matrix3d>(I3.
data)-Eigen::Map<Eigen::Matrix3d>(I2.data)).isZero());
37 Eigen::Map<Eigen::Matrix3d>(I0.
data).setRandom();
39 CPPUNIT_ASSERT(!Eigen::Map<Eigen::Matrix3d>(I1.data).isZero());
41 CPPUNIT_ASSERT(Eigen::Map<Eigen::Matrix3d>(I1.data).isZero());
44 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I2.data)-Eigen::Map<Eigen::Matrix3d>(I2.data).transpose()).isZero());
51 CPPUNIT_ASSERT((Eigen::Map<Eigen::Vector3d>(momentum.
data)-(Eigen::Map<Eigen::Matrix3d>(I2.data)*Eigen::Map<Eigen::Vector3d>(omega.data))).isZero());
61 Eigen::Matrix3d Ic_eig = Eigen::Matrix3d::Random();
63 Eigen::Map<Eigen::Matrix3d>(Ic.
data)=Ic_eig+Ic_eig.transpose();
66 CPPUNIT_ASSERT_EQUAL(I2.
getMass(),mass);
68 CPPUNIT_ASSERT_EQUAL(I2.
getCOG(),c);
69 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I2.
getRotationalInertia().
data)-(Eigen::Map<Eigen::Matrix3d>(Ic.
data)-mass*(Eigen::Map<Eigen::Vector3d>(c.
data)*Eigen::Map<Eigen::Vector3d>(c.
data).transpose()-(Eigen::Map<Eigen::Vector3d>(c.
data).
dot(Eigen::Map<Eigen::Vector3d>(c.
data))*Eigen::Matrix3d::Identity())))).isZero());
73 CPPUNIT_ASSERT_EQUAL(I2.
getMass(),I3.getMass());
74 CPPUNIT_ASSERT_EQUAL(I2.
getCOG(),I3.getCOG());
75 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I2.
getRotationalInertia().
data)-Eigen::Map<Eigen::Matrix3d>(I3.getRotationalInertia().data)).isZero());
78 CPPUNIT_ASSERT_DOUBLES_EQUAL(I4.getMass(),0.0,
epsilon);
80 CPPUNIT_ASSERT(Eigen::Map<Eigen::Matrix3d>(I4.getRotationalInertia().data).isZero());
89 CPPUNIT_ASSERT_DOUBLES_EQUAL(I2.getMass(),I4.getMass(),
epsilon);
90 CPPUNIT_ASSERT_EQUAL(I2.getCOG(),I4.getCOG());
91 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I2.getRotationalInertia().data)-Eigen::Map<Eigen::Matrix3d>(I4.getRotationalInertia().data)).isZero());
95 CPPUNIT_ASSERT_DOUBLES_EQUAL(I3.getMass(),I4.getMass(),
epsilon);
96 CPPUNIT_ASSERT_EQUAL(I3.getCOG(),I4.getCOG());
97 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I3.getRotationalInertia().data)-Eigen::Map<Eigen::Matrix3d>(I4.getRotationalInertia().data)).isZero());
103 I4 = I3.RefPoint(-p);
104 CPPUNIT_ASSERT_DOUBLES_EQUAL(I2.getMass(),I4.getMass(),
epsilon);
105 CPPUNIT_ASSERT_EQUAL(I2.getCOG(),I4.getCOG());
106 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I2.getRotationalInertia().data)-Eigen::Map<Eigen::Matrix3d>(I4.getRotationalInertia().data)).isZero());
109 CPPUNIT_ASSERT_DOUBLES_EQUAL(I3.getMass(),I4.getMass(),
epsilon);
110 CPPUNIT_ASSERT_EQUAL(I3.getCOG(),I4.getCOG());
111 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I3.getRotationalInertia().data)-Eigen::Map<Eigen::Matrix3d>(I4.getRotationalInertia().data)).isZero());
120 CPPUNIT_ASSERT_EQUAL(T*f,(T*I2)*(T*a));
125 CPPUNIT_ASSERT_DOUBLES_EQUAL(I2.getMass(),I4.getMass(),
epsilon);
126 CPPUNIT_ASSERT_EQUAL(I2.getCOG(),I4.getCOG());
127 CPPUNIT_ASSERT((Eigen::Map<Eigen::Matrix3d>(I2.getRotationalInertia().data)-Eigen::Map<Eigen::Matrix3d>(I4.getRotationalInertia().data)).isZero());
136 Eigen::Matrix3d::Map(Ic.
data).triangularView<Eigen::Lower>()= Eigen::Matrix3d::Random().triangularView<Eigen::Lower>();
141 CPPUNIT_ASSERT_EQUAL(I2.
M,I1.
M);
142 CPPUNIT_ASSERT_EQUAL(I2.
H,I1.
H);
143 CPPUNIT_ASSERT_EQUAL(I2.
I,I1.
I);
145 CPPUNIT_ASSERT_EQUAL(I2.
M,I1.
M);
146 CPPUNIT_ASSERT_EQUAL(I2.
H,I1.
H);
147 CPPUNIT_ASSERT_EQUAL(I2.
I,I1.
I);
149 CPPUNIT_ASSERT_EQUAL(I2.
M,(Eigen::Matrix3d::Identity()*mass).eval());
150 CPPUNIT_ASSERT(!I2.
I.isZero());
155 CPPUNIT_ASSERT((I2.
M-I3.M).isZero());
156 CPPUNIT_ASSERT((I2.
H-I3.H).isZero());
157 CPPUNIT_ASSERT((I2.
I-I3.I).isZero());
160 CPPUNIT_ASSERT(I4.M.isZero());
161 CPPUNIT_ASSERT(I4.H.isZero());
162 CPPUNIT_ASSERT(I4.I.isZero());
170 Eigen::Map<Eigen::Matrix3d> E(R.data);
171 Eigen::Matrix3d tmp = E.transpose()*I2.M*E;
172 CPPUNIT_ASSERT((I3.M-tmp).isZero());
173 tmp = E.transpose()*I2.H*E;
174 CPPUNIT_ASSERT((I3.H-tmp).isZero());
175 tmp = E.transpose()*I2.I*E;
176 CPPUNIT_ASSERT((I3.I-tmp).isZero());
179 CPPUNIT_ASSERT((I2.M-I4.M).isZero());
180 CPPUNIT_ASSERT((I2.H-I4.H).isZero());
181 CPPUNIT_ASSERT((I2.I-I4.I).isZero());
185 CPPUNIT_ASSERT((I3.M-I4.M).isZero());
186 CPPUNIT_ASSERT((I3.H-I4.H).isZero());
187 CPPUNIT_ASSERT((I3.I-I4.I).isZero());
193 I4 = I3.RefPoint(-p);
194 CPPUNIT_ASSERT((I2.M-I4.M).isZero());
195 CPPUNIT_ASSERT((I2.H-I4.H).isZero());
196 CPPUNIT_ASSERT((I2.I-I4.I).isZero());
199 CPPUNIT_ASSERT((I3.M-I4.M).isZero());
200 CPPUNIT_ASSERT((I3.H-I4.H).isZero());
201 CPPUNIT_ASSERT((I3.I-I4.I).isZero());
211 CPPUNIT_ASSERT_EQUAL(T*f,(T*I2)*(T*a));
216 CPPUNIT_ASSERT((I2.M-I4.M).isZero());
217 CPPUNIT_ASSERT((I2.H-I4.H).isZero());
218 CPPUNIT_ASSERT((I2.I-I4.I).isZero());
represents rotations in 3 dimensional space.
void TestArticulatedBodyInertia()
6D Inertia of a rigid body
void TestRigidBodyInertia()
doubleAcc dot(const VectorAcc &lhs, const VectorAcc &rhs)
CPPUNIT_TEST_SUITE_REGISTRATION(InertiaTest)
represents both translational and rotational velocities.
6D Inertia of a articulated body
A concrete implementation of a 3 dimensional vector class.
double epsilon
default precision while comparing with Equal(..,..) functions. Initialized at 0.0000001.
static RotationalInertia Zero()
RotationalInertia getRotationalInertia() const
represents a frame transformation in 3D space (rotation + translation)
represents both translational and rotational acceleration.
IMETHOD void random(Vector &a)
addDelta operator for displacement rotational velocity.
void TestRotationalInertia()