如何在没有递归的情况下在matplotlib中转换变换对象?

时间:2014-01-23 21:21:49

标签: python animation matplotlib

我在matplotlib动画中使用翻译,我每20毫秒调用一次方法drawObject()。我的问题是,td2dis(当我打印它时)由第一个方法调用中的一些数据和1个Matrix组成。在第二次调用中,它的数据和2个矩阵。等等。所以当我在N号方法调用时,我有N个矩阵。他们递归地工作。而且由于这种递归,我的动画在几秒后死亡。在这里有任何建立的可能性,如何计算(可能只是乘法?)这些矩阵?或者将它们减少到只有1? 所以我希望变换转换对象而不递归。有可能吗?

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,第一种方法调用中有数据

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.]]))))))))

使用带有第4步数据的矩阵打印td2dis

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.        ]])))

1 个答案:

答案 0 :(得分:1)

解决了,tr有方法set_matrix和get_matrix