Beispiel #1
0
    def rotated(self, ang1, ang2=None, ang3=None):

        if ang2 is None and len(ensure_array(ang1)==3):
            #entered rotation angle tuple
            alpha, beta, gamma = ang1
        elif ang2 is not None and ang3 is not None:
            #entered 3 angles
            alpha=ang1; beta=ang2; gamma=ang3
        else:
            raise InvalidScatterer(self, "Cannot interpret rotation coordinates")

        centers = np.array([s.center for s in self.scatterers])
        com = centers.mean(0)

        new_centers = com + rotate_points(centers - com, alpha, beta, gamma)

        scatterers = []

        for i in range(len(self.scatterers)):
            scatterers.append(self.scatterers[i].translated(
                *(new_centers[i,:] - centers[i,:])).rotated(alpha, beta, gamma))

        new = copy(self)
        new.scatterers = scatterers

        return new
Beispiel #2
0
    def rotated(self, alpha, beta, gamma):
        centers = np.array([s.center for s in (self.s1, self.s2)])
        new_centers = self.location + rotate_points(centers - self.location, alpha, beta, gamma)

        s1, s2 = [s.translated(*(c-n)).rotated(alpha, beta, gamma) for s, c, n
                  in zip((self.s1, self.s2), centers, new_centers)]
        return self.__class__(s1, s2)
Beispiel #3
0
def test_rotate_single_point():
    points = np.array([1., 1., 1.])
    assert_allclose(rotate_points(points, np.pi, np.pi, np.pi),
                    np.array([-1., 1., -1.]), 1e-5)