参考我目前正在构建的这个编程游戏。
替代文字 http://img12.imageshack.us/img12/2089/shapetransformationf.jpg
为了在 WPF 中翻译画布,我使用了两种形式:(TranslateTransform
移动它)和RotateTransform
(旋转它)[相同的孩子 TransformationGroup
]
当画布不旋转(或旋转 90 度,因为它是相同的)时,我可以很容易地获得画布的左上角 x,y 坐标,但我面临的问题是左上角(和其他 3 个点)坐标。
这是因为当应用 aRotateTransform
时,TranslateTransform
'sX
和Y
属性没有改变(因此仍然表明正方形的左上角就像虚线正方形(来自图像)
画布从其中心旋转,这就是它的原点。
那么如何在旋转后获得 4 个点的“新”x 和 y 坐标?
[更新]
替代文字 http://img25.imageshack.us/img25/8676/shaperotationaltransfor.jpg
我找到了一种在旋转后找到左上角坐标的方法(正如您从新图像中看到的那样),方法是将 OffsetX 和 OffsetY 从旋转添加到起始 X 和 Y 坐标。
但是我现在无法确定其余的坐标(其他 3 个)。
有了这个旋转的形状,我怎样才能算出剩余 3 个角的 x 和 y 坐标?
[编辑]
第二张图像中的点不是准确和精确的点。我在脑海中做出了估计。
[更新]解决方案:
首先,我要感谢Jason S的那篇冗长且内容丰富的帖子,他在其中描述了整个过程背后的数学;通过阅读您的帖子并尝试这些价值观,我当然学到了很多东西。
但我现在找到了一个代码片段(感谢EugeneZ提到的TransformBounds
),它完全符合我的要求:
public Rect GetBounds(FrameworkElement of, FrameworkElement from)
{
// Might throw an exception if of and from are not in the same visual tree
GeneralTransform transform = of.TransformToVisual(from);
return transform.TransformBounds(new Rect(0, 0, of.ActualWidth, of.ActualHeight));
}
参考:http ://social.msdn.microsoft.com/Forums/en-US/wpf/thread/86350f19-6457-470e-bde9-66e8970f7059/