def exercise_basic(): assert approx_equal(sum(spatial_lib.xrot((1, 2, 3, 4, 5, 6, 7, 8, 9))), 90) assert approx_equal(sum(spatial_lib.xtrans((1, 2, 3))), 6) assert approx_equal( sum( spatial_lib.cb_as_spatial_transform(cb=matrix.rt(((1, 2, 3, 4, 5, 6, 7, 8, 9), (1, 2, 3))))), 90) assert approx_equal(sum(spatial_lib.crm((1, 2, 3, 4, 5, 6))), 0) assert approx_equal(sum(spatial_lib.crf((1, 2, 3, 4, 5, 6))), 0) i_spatial = spatial_lib.mci(m=1.234, c=matrix.col((1, 2, 3)), i=matrix.sym(sym_mat3=(2, 3, 4, 0.1, 0.2, 0.3))) assert approx_equal(sum(i_spatial), 21.306) assert approx_equal( spatial_lib.kinetic_energy(i_spatial=i_spatial, v_spatial=matrix.col((1, 2, 3, 4, 5, 6))), 75.109) # mass_points = body_lib.mass_points(sites=matrix.col_list([ (0.949, 2.815, 5.189), (0.405, 3.954, 5.917), (0.779, 5.262, 5.227) ]), masses=[2.34, 3.56, 1.58]) assert approx_equal(mass_points.sum_of_masses(), 7.48) assert approx_equal(mass_points.center_of_mass(), [0.654181818182, 3.87397058824, 5.54350802139]) assert approx_equal(mass_points._sum_of_masses, 7.48) assert approx_equal( mass_points.inertia(pivot=matrix.col((0.9, -1.3, 0.4))), [ 404.7677928, 10.04129606, 10.09577652, 10.04129606, 199.7384559, -199.3511949, 10.09577652, -199.3511949, 206.8314171 ])
def exercise_basic(): assert approx_equal(sum(spatial_lib.xrot((1,2,3,4,5,6,7,8,9))), 90) assert approx_equal(sum(spatial_lib.xtrans((1,2,3))), 6) assert approx_equal( sum(spatial_lib.cb_as_spatial_transform( cb=matrix.rt(((1,2,3,4,5,6,7,8,9), (1,2,3))))), 90) assert approx_equal(sum(spatial_lib.crm((1,2,3,4,5,6))), 0) assert approx_equal(sum(spatial_lib.crf((1,2,3,4,5,6))), 0) i_spatial = spatial_lib.mci( m=1.234, c=matrix.col((1,2,3)), i=matrix.sym(sym_mat3=(2,3,4,0.1,0.2,0.3))) assert approx_equal(sum(i_spatial), 21.306) assert approx_equal(spatial_lib.kinetic_energy( i_spatial=i_spatial, v_spatial=matrix.col((1,2,3,4,5,6))), 75.109) # mass_points = body_lib.mass_points( sites=matrix.col_list([ (0.949, 2.815, 5.189), (0.405, 3.954, 5.917), (0.779, 5.262, 5.227)]), masses=[2.34, 3.56, 1.58]) assert approx_equal(mass_points.sum_of_masses(), 7.48) assert approx_equal(mass_points.center_of_mass(), [0.654181818182, 3.87397058824, 5.54350802139]) assert approx_equal(mass_points._sum_of_masses, 7.48) assert approx_equal( mass_points.inertia(pivot=matrix.col((0.9,-1.3,0.4))), [404.7677928, 10.04129606, 10.09577652, 10.04129606, 199.7384559, -199.3511949, 10.09577652, -199.3511949, 206.8314171])
def e_kin(O): "RBDA Eq. 2.67, p. 35" if (O.__e_kin is None): result = 0 for body,v in zip(O.bodies, O.spatial_velocities()): result += kinetic_energy(i_spatial=body.i_spatial, v_spatial=v) O.__e_kin = result return O.__e_kin
def e_kin(O): "RBDA Eq. 2.67, p. 35" if (O.__e_kin is None): result = 0 for body, v in zip(O.bodies, O.spatial_velocities()): result += kinetic_energy(i_spatial=body.i_spatial, v_spatial=v) O.__e_kin = result return O.__e_kin
def qd_e_kin_scales(O, e_kin_epsilon=1.e-12): result = [] rap = result.append for body,asi in zip(O.bodies, O.accumulated_spatial_inertia()): s = body.joint.motion_subspace j_dof = body.joint.degrees_of_freedom qd = [0] * j_dof for i in xrange(j_dof): qd[i] = 1 vj = matrix.col(qd) qd[i] = 0 if (s is not None): vj = s * vj e_kin = kinetic_energy(i_spatial=asi, v_spatial=vj) if (e_kin < e_kin_epsilon): rap(1) else: rap(1 / e_kin**0.5) return result
def qd_e_kin_scales(O, e_kin_epsilon=1.e-12): result = [] rap = result.append for body, asi in zip(O.bodies, O.accumulated_spatial_inertia()): s = body.joint.motion_subspace j_dof = body.joint.degrees_of_freedom qd = [0] * j_dof for i in xrange(j_dof): qd[i] = 1 vj = matrix.col(qd) qd[i] = 0 if (s is not None): vj = s * vj e_kin = kinetic_energy(i_spatial=asi, v_spatial=vj) if (e_kin < e_kin_epsilon): rap(1) else: rap(1 / e_kin**0.5) return result