コード例 #1
0
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
        ])
コード例 #2
0
ファイル: tst_basic.py プロジェクト: cctbx/cctbx-playground
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])
コード例 #3
0
 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
コード例 #4
0
 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
コード例 #5
0
 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
コード例 #6
0
 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