给定矩形的4个点,如何计算矩形的旋转角度

时间:2019-07-03 07:27:55

标签: algorithm octave bounding-box

我有一组2D点。我对它的协方差进行了特征向量估计。进行了新基础的转换,并在其中找到了边界框。 为简单起见,在下面以八度为单位给出代码。 点给出为:形状为Nx2的点变量

mycov = cov(points);
[V, E] = eig(mycov);
new_basis_points = V*points';

然后在代码中,我估计每个轴的最大值和最小值,并设置四个点:

points = [[minX, minY], 
          [minX, maxY],
          [maxX, minY],
          [maxX, maxY]];

现在我变回旧的基础:

old_basis_bounding_box = V'*points';

这些计算是正确的,我在旧的基础上得到了四个角点。但是现在我想估计矩形的侧面和X轴之间的旋转角度。

问题是old_basis_bounding_box中点的顺序未定义。因此,我不确定要选择哪两个点进行角度估计。

我应该如何进行?

1 个答案:

答案 0 :(得分:2)

Illustration

我相信alpha角(图像中标记为绿色)是您想要的。假设矩形的最低点是O(0, 0),可以很容易地将该角度计算为cos -1 (a / sqrt(a ^ 2 + b ^ 2)),其中{{1 }}是最低的slope正值。从D≠O(其中D是y轴坐标最低的点)开始,只需将整个对象移动向量B(a,b),以使D = O。

当矩形已经与轴对齐时,别忘了单独处理这种情况,否则可能会被零除。

我的伪代码:

OD