示例#1
0
 def test_rotmat_90(self):
     """Test regular 90 deg rotation."""
     v1 = Vector(0, 0, 1)
     v2 = Vector(0, 1, 0)
     rot = rotmat(v1, v2)
     self.assertTrue(numpy.allclose(rot[0], numpy.array([1.0, 0.0, 0.0])))
     self.assertTrue(numpy.allclose(rot[1], numpy.array([0.0, 0.0, 1.0])))
     self.assertTrue(numpy.allclose(rot[2], numpy.array([0.0, -1.0, 0.0])))
     self.assertTrue(
         numpy.allclose(v1.left_multiply(rot).get_array(), [0.0, 1.0, 0.0]))
     self.assertTrue(
         numpy.allclose(
             v1.right_multiply(numpy.transpose(rot)).get_array(),
             [0.0, 1.0, 0.0]))
def build_coord(vec1, vec2, vec3, dist, angle, torsion, matrix=None):
    """"
    Builds coordinates assuming a reference frame:
    A (-1/-1/0)
    B (-1/0/0)
    C (0/0/0)
    """
    angle = math.radians(180 - angle)
    torsion = math.radians(torsion)
    # create initial vector
    vec_x = dist * math.cos(angle)
    vec_y = dist * math.cos(torsion) * math.sin(angle)
    vec_z = dist * math.sin(torsion) * math.sin(angle)

    # TODO: cache matrices for (dist/angle/torsion) (memoize pattern?)
    vec_d2 = Vector([vec_x, vec_y, vec_z])
    if matrix == None:
        matrix = get_ref_matrix(vec1, vec2, vec3)
    result_vec = vec_d2.right_multiply(matrix) + vec3
    return result_vec