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