Swift Playgrounds 中变换的串联顺序
Posted
技术标签:
【中文标题】Swift Playgrounds 中变换的串联顺序【英文标题】:Order of Concatenation for Transform in Swift Playgrounds 【发布时间】:2018-02-02 17:44:17 【问题描述】:在使用 Playground 时,我发现了一些意想不到的场景
我正在将 square(w: 100, h: 100)
从 (0,0)
转换为 (150, 150)
并将其旋转 .pi。我同时使用连接来平移和旋转正方形,所以这很令人惊讶,但是当我切换调用平移和旋转的顺序时,正方形会以不同的方式移动
当我在翻译之前旋转正方形时,正方形将从(0,0)
移动到(150, 150)
,正如预测的那样
但是,当我在旋转正方形之前进行翻译时,正方形会从 (0,0)
移动并向上旋转并离开屏幕,这对我来说在逻辑上没有意义,有人可以尝试向我解释一下吗?
【问题讨论】:
应用仿射变换时,操作顺序很重要。我不记得从类中提供完整的答案,也找不到包含 ios 示例的文章,但这篇文章 - docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/… - 解释了一般概念,可以帮助您从概念上清除一些东西。 嗯,这是有道理的,但是,当我运行代码时,它与该站点的解释完全相反。但是我可能只是误解了这里的一些关键,谢谢! 不同的图形系统使用不同的坐标系。我没有特别研究过 Windows 图形系统,但如果您看到完全相反的行为,那么很可能是左手/右手旋转差异,或者左下角与左上角的原点差异。我的建议(不久前我自己重新学习了所有这些)是回到底层的线性代数:youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab(视频 1-5 足以用于 CGGraphics) 如果你想让你的转换更容易推理,关键是把对象的中心放在原点(而不是把角放在原点)。当你这样做时,所有的转换都会按照你可能想要的方式工作。 不显示代码图片。显示代码。 【参考方案1】:由于矩阵代数的性质,在concatenating
(又名CGAffineTransformConcat
)中应用变换的顺序与您一一应用它们的顺序是相反的达到同样的效果。
【讨论】:
可能会帮助你在这里阅读我的讨论:apeth.com/iOSBook/ch14.html#_transform以上是关于Swift Playgrounds 中变换的串联顺序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 XCode 8 Playgrounds 中使用 Swift 2.3?
使用 Swift 将结构附加到数组(在 iOS 中失败,但在 Playgrounds 中失败)
swift Swift Playgrounds模拟时钟示例。