Image processing 如何复制对象';s平移、旋转、缩放?(可能是语言不可知论者)

Image processing 如何复制对象';s平移、旋转、缩放?(可能是语言不可知论者),image-processing,matrix,cocos2d-iphone,2d,Image Processing,Matrix,Cocos2d Iphone,2d,全部, 我有一个相当令人沮丧的问题,我认为很简单,但我的大脑就是不工作。简言之,问题是:给定一个精灵/图像/东西,你知道有人旋转/平移/缩放了精灵,但你不知道这些发生的顺序,你如何复制准确的图像 为了便于说明,给出如下图像: 有人能够旋转/平移/缩放它,使它看起来像这样(操纵后的样子——在本例中有两个…) 我知道,如果有人先旋转,然后缩放,然后平移,你会得到一个不同的图像,而不是相反的图像。问题是,因为我事先不知道顺序,所以我很难复制图像。以下是我得到的: 下面是它的覆盖图,让你知道我离这

全部,

我有一个相当令人沮丧的问题,我认为很简单,但我的大脑就是不工作。简言之,问题是:给定一个精灵/图像/东西,你知道有人旋转/平移/缩放了精灵,但你不知道这些发生的顺序,你如何复制准确的图像

为了便于说明,给出如下图像:

有人能够旋转/平移/缩放它,使它看起来像这样(操纵后的样子——在本例中有两个…)

我知道,如果有人先旋转,然后缩放,然后平移,你会得到一个不同的图像,而不是相反的图像。问题是,因为我事先不知道顺序,所以我很难复制图像。以下是我得到的:

下面是它的覆盖图,让你知道我离这里有多远:

我将精灵的主播点设置在中心,所以这不是问题所在。我还考虑了缩放变化的宽度/高度,但出于某种原因,它总是有点偏离。似乎旋转的幅度越大,我的结果就越差。在右图中,你可以看到结果是完美的,但在左图中,由于存在明显的旋转,因此结果相差很远

我知道这可能是一个简单的问题,但我非常感谢您的帮助。

如果您仅限于(旋转、平移、缩放),那么一些线性代数可以为您提供变换矩阵

您需要精灵的原始边界框(x,y)和精灵的变换边界框(u,v)。首先,通过将变换坐标的中心移动到原始坐标的中心来删除任何平移。现在解下面的方程——你有4个未知数和4个方程,所以只需做一些代数运算就可以找到a,b,c和d

[x1x2x3x4;y1y2y3y4]=[ab;cd]*[u1u2u3u4;v1v2v4]

对于仿射变换,a、b、c、d遵循以下结构:

[sx*cos(θ)sy*sin(θ);-sx*sin(θ)sy*cos(θ)]

因此,您可以将其缩减为缩放(sx,sy)、旋转(θ),并且您已经计算了变换


也许有更快的方法可以做到这一点,但这种方法遵循第一原理。

解决了!我犯了很多愚蠢的小错误,但主要的错误是我计算旋转中心点的方法是基于左上角,而不是中心