C# 创建一个矩形以覆盖旋转的Microsoft.XNA.Framework.rectangle

C# 创建一个矩形以覆盖旋转的Microsoft.XNA.Framework.rectangle,c#,xna,rotation,C#,Xna,Rotation,如果我在C#中有一个矩形类,当它旋转时,如何得到一个包含它的矩形 基本上,我想找到旋转矩形的矩形。我很好奇如何将矩形作为数据结构,我的意思是,矩形是二维的,而XNA让我想到了三维 然而,即使是在2D和3D中,我认为您想要的是AABB(轴对齐边界框),这很容易找到,因为它是由两个点定义的,这两个点由原始矩形的每个点的每个轴上的最小值和相应的最大值通过旋转变换而形成 稍后编辑: 对于包含X、Y、宽度和高度的矩形结构,矩形有以下两点: (x1, y1) = (X, Y) and (x2, y2) =

如果我在C#中有一个矩形类,当它旋转时,如何得到一个包含它的矩形


基本上,我想找到旋转矩形的矩形。

我很好奇如何将矩形作为数据结构,我的意思是,矩形是二维的,而XNA让我想到了三维

然而,即使是在2D和3D中,我认为您想要的是AABB(轴对齐边界框),这很容易找到,因为它是由两个点定义的,这两个点由原始矩形的每个点的每个轴上的最小值和相应的最大值通过旋转变换而形成

稍后编辑:

对于包含X、Y、宽度和高度的矩形结构,矩形有以下两点:

(x1, y1) = (X, Y) and 
(x2, y2) = (X + Width, Y + Width).
旋转矩形时,实际旋转这两点并获得:

(xr1, yr1) = rotate(x1, y1)
(xr2, yr2) = rotate(x2, y2).
现在,所需的矩形由以下坐标点定义:

p1 = new Point(Min(xr1, xr2), Min(yr1, yr2))
p2 = new Point(Max(xr1, xr2), Max(yr1, yr2))

旋转是将矩形围绕某一点旋转一个角度的方法。

如何旋转矩形?要获得边界框,您需要查看四个结果点,并找到Y和X的最小值和最大值,

我已使用Microsoft.XNA.Framework.Rectangle结构的必要计算更新了答案。我不明白这一点:(xr1,yr1)=旋转(x1,y1)x1,y1如何旋转?您必须查看所有4个点,不仅仅是左上角和右下角。考虑将矩形旋转45度。这两个点的X或Y相等,但其他点会突出到两侧。@Jason-你说得对,我错过了,我在考虑优化,优化得太多了。所以实际上,所有四个点都应该考虑。@meds-(xr1,yr1)=rotate(x1,y1)意味着xr1和yr1是点(x1,y1)的坐标,该点以旋转矩形的方式旋转(以特定角度,围绕特定点)。嗯,也许我应该再问一个问题,因为我实际上是想问“如何旋转一个矩形”,我只是假设得到一个旋转的矩形AABB会涉及到实际的旋转计算(出于某种原因)。