旋转图像的最小可能边界框

时间:2010-12-31 02:14:36

标签: actionscript-3 math geometry

假设我有一些宽度为 w1 且高度 h1 的任意输入图像。我想将这个图像一直旋转360度回到起始位置。但是,如果图像是除圆形以外的任何图像,则如果绘制的画布仍然按 h1 的大小 w1 保留图像的边缘。< / p>

Figure

我需要的是确定可用于输入图像的所有旋转版本的画布大小(宽度 w2 和高度 h2 )。我知道 w2 == h2 ,因此所需的画布大小是一个正方形,因为很明显我们正在围绕一个中心点旋转一些东西,而最终的图像(经过360次旋转)基本上是一个圆圈。

要考虑的另一件事是像正方形这样的物体会有弯角,所以只使用两个尺寸的宽度或高度的最大值也不起作用。

我提出的一个解决方案是创建比我需要的更大的画布(例如将 w2 h2 设置为max(w1, h1) * 2,旋转所有内容,然后修剪所有透明像素。这不是非常有效,我宁愿能够预先计算最紧的边界框。

3 个答案:

答案 0 :(得分:3)

这是一个几何问题。你基本上想要找到一个圆形的直径(d),它会记录你的原始画布,然后是w2 = h2 = d

这种圆的直径为√(w1^2+h1^2)

所以w2 = h2 = √(w1^2+h1^2)

另外,为了避免剪裁,你可能想要取结果的上限而不是舍入。

答案 1 :(得分:2)

如果图像以正方形旋转,则必须使画布的高度和宽度与斜边相同。

w = h = sqrt(h ^ 2 + w ^ 2)

(我不知道动作脚本)

但是,如果您的图像不在正方形中,您基本上必须找到距离中心最远的点...

PS:已经很晚了,我在散步,所以如果这可能是错的,我很抱歉。

答案 2 :(得分:1)

你的画布必须是正方形。

如果要围绕任何一点(在本例中为A点)旋转像绿色图形一样的身体,则正方形的一侧是距离身体中最远点A的距离的两倍。

alt text