我最近不得不修改一个MFC应用程序来做一些漂亮的图形(模拟一个LCD显示器)。这不是我的家乡,但我设法用GDI +来解决它; GraphicsPath,贝塞尔曲线和矩阵变换现在是我的朋友。但让我感到奇怪的是,默认情况下矩阵变换操作似乎是倒退的。
如果我做某事......
Graphics g;
g.TranslateTransform( ... )
g.RotateTransform( ...)
s.ScaleTransform( ... )
...然后以相反的顺序应用变换:缩放,然后旋转,然后翻译。这对我来说是违反直觉的。
我知道我可以在转换调用中添加一个参数,将行为更改为我想要的内容,如下所示:
g.RotateTransform( ..., MatrixOrderAppend)
g.ScaleTransform( ..., MatrixOrderAppend)
将MatrixOrderPrepend
作为默认值的理由是什么?
答案 0 :(得分:1)
在MSDN上是一篇简短的文章Why Transformation Order Is Significant。 我不确定为什么'MatrixOrderPrepend'是默认值,但显然要么有非常有效的应用程序。猜猜他们不得不选一个,不用担心太多!