Tag: 次序

矩阵/坐标转换顺序

我有两个要点: Point [] original; AND Point [] transformed; 这些变换后的数组只是应用了变换的原始副本。 例: matrix.Rotate(5f); matrix.Scale(.8f, 1.1f); matrix.Translate(30f, 18f); matrix.TransformPoints(transformed); 原点已知。 转换值已知。 应用变换的顺序是未知的。 如何计算/推断变换的顺序? 编辑 只有一轮转型。 一轮可以包含至多三个转换,如下所示。 应用的唯一转换是旋转,缩放和平移的任意组合。 为了给它一些现实世界的背景,考虑使用已知兴趣点的图像。 您打印图像,扫描并尝试再次阅读。 图像包含方向标记,允许我计算扫描过程中应用的变换。 现在,蛮力方法将是: 读取扫描图像。 计算扫描图像的旋转。 在扫描图像上应用旋转。 计算旋转图像的比例。 在旋转的图像上应用比例。 计算缩放图像上的平移。 在缩放图像上应用翻译。 您现在可以使用原始点从已处理图像中读取感兴趣的点,就像没有变换一样。 当然这种方法很昂贵。 500MB图像一次需要在内存中至少有两个副本,并且必须使用图形对象进行转换。 这个问题的前提是只读取一次图像,计算所有变换并将它们应用于坐标而不是图像本身。 使用变换后的坐标来读取兴趣点。 这就是“转换顺序”问题的来源。下面有一些非常有用的答案,我希望这可以清除背景。