如何将旋转的矩形缩放以始终适应另一个矩形

3
我的问题背景如下: 我有一张图片和一个剪裁矩形,描述了如何将图片裁剪为所需的结果图片。剪裁矩形始终小于或等于图片的大小。 现在应该可以旋转剪裁矩形。 这意味着在图片内旋转剪切矩形时,必须缩放剪切以使其不超出照片范围。
谁能帮我提供一个公式,根据轴对齐的照片矩形来计算裁剪矩形的比例?
我的第一次尝试是计算剪切矩形的轴对齐边界框,然后将其适合于照片矩形。但是,我卡在了这种方法上,
编辑: 还有一件事情要注意: - 裁剪矩形可以具有其他尺寸和另一个中心点在周围矩形内。这意味着裁剪矩形可以小得多,但例如位于图片矩形的左下角。因此,在旋转较小的裁剪时,它也将超出其限制
提前感谢 Sebastian

裁剪矩形必须与源图片具有相同的比例吗? - MBo
2个回答

8

当你把一个宽度为w,高度为h的轴对齐矩形旋转一个角度φ时,旋转后的矩形轴对齐的边框的宽度和高度分别为:

W = w·|cos φ| + h·|sin φ|
H = w·|sin φ| + h·|cos φ|

(符号| x |表示绝对值。)这是旋转裁剪矩形的边界框,您可以将其缩放以适应宽度为wo和高度为ho的原始矩形,并使用该因子。
a = min(wo / W, ho / H)

如果a小于1,则旋转裁剪矩形适合原始矩形,无需缩放。否则,将裁剪矩形减小到缩放后的尺寸。
W′ = a·W
H′ = a·H

谢谢。有一个问题是,裁剪矩形不能与原始矩形有相同的中心点。例如,裁剪矩形可以小得多,但定位在周围图片矩形的左上角。在将裁剪矩形围绕其中心旋转时,它也会超出图片矩形。我不知道如何处理这种情况。我需要找到适用于此情况的缩放因子。有任何想法吗?谢谢 - TosKen
然后,您的基本矩形必须基于裁剪矩形中心到外部矩形边界的最小距离:wo = 2·min(x - xo - wo/2, xo + wo/2 - x),其中 x 是裁剪矩形的中心,xo 是外部矩形的中心。当然,对于 Hy 也是如此。 - M Oehm
@M Oehm:或者你可以明确限制裁剪矩形的两个角落位于外部矩形的边缘上... 相同的计算方法,只是视角的改变。顺便+1. - Bob__
谢谢,但我无法得到可信的结果。例如,假设外部矩形是一个四边形,其原点位于(0,0),尺寸为1。在这种情况下,中心x0位于0.5,wo/2始终为0.5。对于每个内部裁剪矩形,我都得到负值的wo。 - TosKen
好的,我看到了我的笔误: 应该是 2 · min(x - (xo - wo/2), xo + wo/2 - x)xo - wo/2 是指左边缘的一种花式表述方式,而 xo + wo/2 则是右边缘。 - M Oehm

1
你可以开始检查裁剪矩形的尺寸是否适合旧矩形:
bound_x = a * cos(theta) + b * sin(theta)
bound_y = b * cos(theta) + a * sin(theta)

其中a和b是新的尺寸,theta是角度,bound_x和bound_y应该比原始矩形小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接