我正在尝试找到计算最大(面积)矩形的最佳方法,该矩形可以包含在旋转的矩形内.
一些图片应该有助于(我希望)可视化我的意思:

给出输入矩形的宽度和高度,以及旋转它的角度.输出矩形不会旋转或倾斜.
我正沿着漫长的路线往下走,我甚至不确定它是否会处理角落的情况(没有双关语).我确信这有一个优雅的解决方案.有小费吗?
编辑:输出矩形点不一定要触摸输入矩形边.(感谢E先生)
参考我目前正在构建的这个编程游戏.
alt text http://img12.imageshack.us/img12/2089/shapetransformationf.jpg
要在WPF中翻译Canvas,我使用两个表单:( TranslateTransform移动它)和RotateTransform(旋转它)[ 相同的子节点 TransformationGroup ]
我可以很容易地获得画布的左上角x,y坐标,当它没有旋转(或旋转90度,因为它将是相同的),但我面临的问题是左上角(和其他3点)坐标.
这是因为当RotateTransform应用a 时,TranslateTransform's X和Y属性不会改变(因此仍然表明正方形的左上角就像点状正方形(来自图像)
Canvas正在从它的中心旋转,因此它就是它的起源.
那么如何在旋转后获得4个点的"新"x和y坐标?
[UPDATE]
alt text 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 = …Run Code Online (Sandbox Code Playgroud)