2014-01-23 2 views
0

Я использую переводы в анимации matplotlib, и я вызываю метод drawObject() каждые 20 мс. Моя проблема заключается в том, что td2dis (когда я его печатаю) состоит из некоторых данных и 1 матрицы, при первом вызове метода. Во втором вызове его данные и 2 матрицы. И так далее. Поэтому, когда я нахожусь в вызове метода номер N, у меня есть N матриц. И они работают рекурсивно. И из-за этой рекурсии моя цель умирает через несколько секунд. Есть ли какая-либо построенная возможность, как считать (возможно, только умножить?) Эти матрицы? или уменьшить их до 1? Поэтому я хочу преобразовать преобразованный объект без рекурсии. Является ли это возможным?Как преобразовать преобразованный объект в matplotlib без рекурсии?

td2dis = ax.transData 

def drawObjects(): 
    global td2dis 
    ... 
    tr = mpl.transforms.Affine2D().rotate_deg_around(coords[0], coords[1], angle) 
    t=td2dis+tr 
    td2dis=t 
    ... 

Печатный переменной td2dis с матрицей с данными в 1-ом вызове метода

CompositeGenericTransform(TransformWrapper(BlendedAffine2D(IdentityTransform(),IdentityTransform())), CompositeGenericTransform(BboxTransformFrom(TransformedBbox(Bbox('array([[ -19.5  , -10.7983871],\n  [ 221.5  , 140.7983871]])'), TransformWrapper(BlendedAffine2D(IdentityTransform(),IdentityTransform())))), BboxTransformTo(TransformedBbox(Bbox('array([[ 0.125, 0.25 ],\n  [ 0.9 , 0.9 ]])'), BboxTransformTo(TransformedBbox(Bbox('array([[ 0., 0.],\n  [ 8., 6.]])'), Affine2D(array([[ 80., 0., 0.], 
     [ 0., 80., 0.], 
     [ 0., 0., 1.]])))))))) 

Печатные td2dis с матрицами с данными в 4-м этапе

CompositeGenericTransform(CompositeGenericTransform(CompositeGenericTransform(CompositeGenericTransform(CompositeGenericTransform(TransformWrapper(BlendedAffine2D(IdentityTransform(),IdentityTransform())), CompositeGenericTransform(BboxTransformFrom(TransformedBbox(Bbox('array([[ -19.5  , -10.7983871],\n  [ 221.5  , 140.7983871]])'), TransformWrapper(BlendedAffine2D(IdentityTransform(),IdentityTransform())))), BboxTransformTo(TransformedBbox(Bbox('array([[ 0.125, 0.25 ],\n  [ 0.9 , 0.9 ]])'), BboxTransformTo(TransformedBbox(Bbox('array([[ 0., 0.],\n  [ 8., 6.]])'), **Affine2D(array(**[[ 80., 0., 0.], 
     [ 0., 80., 0.], 
     [ 0., 0., 1.]])))))))), Affine2D(array([[ 0.99968918, -0.02493069, 6.97023765], 
     [ 0.02493069, 0.99968918, -7.08231365], 
     [ 0.  , 0.  , 1.  ]]))), Affine2D(array([[ 0.99968918, -0.02493069, 6.99869385], 
     [ 0.02493069, 0.99968918, -7.84282183], 
     [ 0.  , 0.  , 1.  ]]))), Affine2D(array([[ 0.99968918, -0.02493069, 6.94884054], 
     [ 0.02493069, 0.99968918, -7.04407025], 
     [ 0.  , 0.  , 1.  ]]))), Affine2D(array([[ 0.99968918, -0.02493069, 6.94929398], 
     [ 0.02493069, 0.99968918, -7.04925306], 
     [ 0.  , 0.  , 1.  ]]))) 

ответ

0

Solved, тр есть методы set_matrix и get_matrix

Смежные вопросы