0

我正在尝试编写一种算法,在 2D 中围绕其中心旋转一个正方形,直到它与从相同位置开始、大小相同且中心相同的旋转正方形匹配或“足够接近”。这很容易。

然而,正方形的角需要匹配,因此要获得匹配,要旋转的正方形的右上角必须足够接近旋转正方形的原始右上角。

我正在尝试使其尽可能高效,因此如果基于上述标准的两个正方形的接近度变得更差,我知道我需要尝试朝相反的方向旋转。

我已经编写了旋转正方形的方法,并测试它们彼此之间的接近程度

我的主要问题是我应该如何根据我得到的接近程度来改变每次迭代的旋转量

例如,如果当前测量值比前一个更近,则将角度减半并沿相同方向移动,否则将角度加倍并沿相反方向旋转?

但是,我认为这在效率方面并不是一个很差的解决方案。

任何想法将不胜感激。

4

3 回答 3

0

这个方案怎么样:

以 0、90、180、270 度角旋转(请注意,这些特殊旋转有比通用旋转更有效的算法);比较它们中的每一个以找到您需要搜索的象限。换句话说,尝试找到匹配度最高的两个轴。

然后进行二分搜索,例如当您确定旋转的正方形在 90-180 象限中时,然后将搜索区域划分为两个八分圆:90-135 和 135-180。旋转 90+45/2 和 180-45/2 并进行比较。如果 90+45/2 旋转的匹配值高于 180-45/2,则继续在 90-135 八分圆中搜索,否则继续在 135-180 八分圆中搜索。起泡,冲洗,重复。

每次在递归中,你都这样做:

  1. 将搜索空间划分为两个字节(如果搜索空间是从 A 到 B,则第一个字节为A + (A + B) / 2,第二个字节为B - (A + B) / 2
  2. 检查左正数:旋转A + (A + B) / 4。相比。
  3. 检查右方位:旋转B - (A + B) / 4. 相比。
  4. 根据左侧或右侧是否具有更高的匹配值,调整搜索空间,向左或向右。
于 2010-11-21T16:54:58.393 回答
0

我能想到的另一种方案是,您尝试定位旋转图像的“角落”,而不是尝试旋转和搜索。

如果您的图像不包含任何透明胶片,则有四个点位于sqrt(width^2+height^2)远离中心的位置,其颜色与未旋转图像的角落完全相同。这将限制您需要搜索的旋转次数。

于 2010-11-21T17:04:45.617 回答
0

...此外,为了建立这里的其他建议,请记住,对于围绕其中心旋转的任何矩形,您只需要计算一个角的旋转。您可以通过添加或减去为获得第一个角而计算的相同偏移量来推断其他三个角。这应该会加快您的计算速度(假设[但不认为]这是这里的瓶颈)。

于 2010-11-21T17:19:07.290 回答