如何有效地计算图形旋转?


13

图片1 图片2

我有一个通过字节矩阵(类似位图的矩阵)表示的图形。示例显示在上Picture 1

目的是找到给定图形的最佳旋转角度。当图形旋转最佳角度时,与X和Y轴平行并刻有图形的矩形的面积最小。

刻有图形的矩形在图片上显示为浅灰色。在中Picture 2,您可以看到图形的理想旋转方向为顺时针大约30度。

现在,我知道算法如何找到该角度,但是在我看来这是非常低效的。它是这样的:

  1. 循环从0到45度的角度。
  2. 对于当前角度,为每个图形点计算新的旋转位置
  3. 查找包含图形(最小和最大x,y)的矩形的边界,如果到目前为止最匹配,则对其进行注册
  4. 下一个角度

这是一种蛮力方法,对于小人物来说效果很好且相当快。但是,我需要处理包含多达1000万点的图形,并且算法变得缓慢。

什么是解决这个问题的好算法?

Answers:



12

方法的第一步是有缺陷的- 在0到45之间有无限数量的实际值,因此“遍历它们”毫无意义。但是,您的算法可以修复:

  • 找到多边形的凸包

  • 遍历由凸包的外边缘给定的有限(!)个角度

  • 现在使用这些角度应用步骤2到4。

之所以可行,是因为可以证明最小包围矩形必须接触凸包的外边缘之一。


是的,这正是我要做的,已经找到了Dan答案的帮助。谢谢。
迪桑2014年

@Dusan:我不确定其他答案是否会描述相同的方法,因此我尝试以一种更简单的方式来描述该解决方案,希望可以更清楚一些。在此处找到说明:cgm.cs.mcgill.ca/~orm/maer.html
Doc Brown

是的,您是对的,您的方法更加具体,简单和清晰,但是我自己根据Dan的回答中给出的提示得出了自己的结论,因此我接受了他。希望您的答案能获得更多的赞成票。别往心里放。干杯!
Dusan 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.