def test_rotate(): q = Quaternion.from_euler(Point(0, 0, np.pi / 2)) c = Coord.from_nothing(10) rc = c.rotate(q) assert rc.origin == P0() np.testing.assert_almost_equal(rc.x_axis.data, PY(1, 10).data) np.testing.assert_almost_equal(rc.y_axis.data, PX(-1, 10).data) np.testing.assert_almost_equal(rc.z_axis.data, PZ(1, 10).data)
def test_from_coords(): c1 = Coord.from_xy(P0(), PX(), PY()) c2 = Coord.from_xy(P0(), PY(), PZ()) trans_to = Transformation.from_coords(c1, c2) trans_from = Transformation.from_coords(c2, c1) ps = Point(np.random.random((100, 3))) np.testing.assert_array_almost_equal( ps.data, trans_from.translate(trans_to.translate(ps)).data) qs = Quaternion.from_euler(ps) np.testing.assert_array_almost_equal( qs, trans_from.rotate(trans_to.rotate(qs)))
def transform(self, transformantion: Transformation = Transformation( Point(0.75, 0, 0), Quaternion.from_euler(Point(np.pi, 0, -np.pi / 2)))): return OBJ(transformantion.point(self.vertices), self.faces)