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

Algorithm 如何缩放旋转的矩形以始终适合另一个矩形,algorithm,geometry,Algorithm,Geometry,我问题的背景如下。 我有一张图片和一个裁剪矩形,它描述了如何裁剪图片以生成结果图片。裁剪矩形始终小于或等于图片的最大大小。 现在应该可以旋转裁剪矩形了。 这意味着在图片内旋转裁剪规则时,必须缩放裁剪,以使其延伸不超过图片 任何人都能帮我一个公式,如何计算基于轴对齐照片规则的作物矩形的比例 我的第一次尝试是计算裁剪矩形的轴对齐边界框,然后使其适合照片矩形。但不知怎的,我被这种方法困住了 编辑: 还有一点需要注意: -裁剪矩形可以在周围矩形内具有其他尺寸和另一个中心点。这意味着裁剪矩形可以小得多,但

我问题的背景如下。 我有一张图片和一个裁剪矩形,它描述了如何裁剪图片以生成结果图片。裁剪矩形始终小于或等于图片的最大大小。 现在应该可以旋转裁剪矩形了。 这意味着在图片内旋转裁剪规则时,必须缩放裁剪,以使其延伸不超过图片

任何人都能帮我一个公式,如何计算基于轴对齐照片规则的作物矩形的比例

我的第一次尝试是计算裁剪矩形的轴对齐边界框,然后使其适合照片矩形。但不知怎的,我被这种方法困住了

编辑: 还有一点需要注意: -裁剪矩形可以在周围矩形内具有其他尺寸和另一个中心点。这意味着裁剪矩形可以小得多,但例如位于图片矩形的左下界。因此,当旋转较小的作物时,它也会超出其限制

提前谢谢
Sebastian

您可以开始检查裁剪矩形的尺寸是否适合旧矩形:

bound_x = a * cos(theta) + b * sin(theta)
bound_y = b * cos(theta) + a * sin(theta)

其中a和b是新尺寸,θus角度和边界x和边界y应小于原始矩形。

将宽度
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

裁剪矩形必须与源图片具有相同的比例吗?谢谢。一个问题是,裁剪矩形不能与原始矩形具有相同的中心。例如,裁剪矩形可以小得多,但朝向周围图片矩形的左上角。当围绕其中心旋转裁剪时,它也将超出图片矩形。我不知道如何处理这个案子。我需要找到比例因子,它也涵盖了这种情况。有什么想法吗?谢谢您基本矩形必须基于裁剪矩形中心到外矩形边界的最小距离:
wo=2·min(x-xo-wo/2,xo+wo/2-x)
其中
x
是裁剪矩形的中心,
xo
是我们矩形的中心。当然,对于
H
y
,也是如此。@M Oehm:或者您可以显式地约束裁剪矩形的两个角,使其位于外矩形的边上。。。同样的计算,只是视角的改变+顺便说一句,谢谢你,但我不能得到合理的结果。例如,假设外部矩形是一个四边形,其原点位于(0,0),尺寸为1。在这种情况下,中心x0为0.5,wo/2始终为0.5。对于这一点,我得到了内部每个裁剪矩形的wo的负值。好的,我看到我的输入:它是
2·min(x-(xo-wo/2),xo+wo/2-x)
xo-wo/2
是指左边缘的奇特方式,
xo+wo/2
是指右边缘。