我找了一些类似的问题,但我认为没有一个与我的问题相关。
我正在用 C++ 编写 10x10 网格单元格中简单多边形(即矩形、L 形多边形...)的平移和旋转代码。
假设我有一个宽度 = 1 个单元格、高度 = 3 个单元格的矩形。在 8 个方向上翻译它很容易。但是如果我想将这个多边形旋转 45º,我可以得到它,但我想计算哪些单元格现在被矩形占据或部分占据。
我有矩形的质心,即它的一个单元格。我可以根据大小计算旋转前矩形所占的位置。但是,旋转后,我找不到计算矩形所占单元格位置的方法。
非常感谢!
最佳答案
您绝对可以将其视为边界框问题 -
取矩形的四个角,这些角的 x,y 坐标是它们占据的单元格编号 - 例如对于以 o(2,2)
为中心的 width = 1 cell
和 height = 3 cells
的矩形,这 4 个角表示为 corner(x ,y) 格式为 - a(1.5,3.5) b(2.5,3.5) c(2.5,0.5) d(1.5,0.5)
。
一旦清楚了这一点,我认为您可能已经理解了剩余的过程,因为它已经在此处多次解释过 -
Calculate Bounding box coordinates from a rotated rectangle
总而言之,将 2D 旋转的标准矩阵应用于这 4 个角并获得新的角,例如
a'.x = o.x + (a.x - o.x) * cos(t) + (a.y - o.y) * sin(t)
a'.y = o.y - (a.x - o.x) * sin(t) + (a.y - o.y) * cos(t)
其他点也类似。然后找到 max 和 min x 和 y
,它们将代表您的矩形占据的单元格。其他凸多边形也可以做类似的事情。
更新: 正如 Fang 所评论的那样,要获得旋转多边形占据的准确单元数,您仍然需要对边界框内的所有方形单元进行正方形到多边形的交集检查 - 你可以看看这个 -
关于c++ - 计算多边形在网格中旋转后所占的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28001648/