【问题标题】:How to scale a rotated rectangle to always fit another rectangle如何缩放旋转的矩形以始终适合另一个矩形
【发布时间】:2015-11-23 08:32:24
【问题描述】:

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

谁能帮我提供一个公式,说明如何根据轴对齐的照片矩形计算裁剪矩形的比例?

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

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

提前致谢 塞巴斯蒂安

【问题讨论】:

  • 裁剪矩形必须与源图片的比例相同吗?

标签: algorithm geometry


【解决方案1】:

当您将宽度为 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 是矩形的中心。当然,Hy 也是如此。
  • @M Oehm:或者你可以明确地限制裁剪矩形的两个角位于外部矩形的边缘......相同的计算,只是改变了视角。 +1,顺便说一句
  • 谢谢,但我无法得到合理的结果。例如,假设外部矩形是一个四边形,它的原点位于 (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 是右边缘。
【解决方案2】:

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

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

其中 a 和 b 是新的维度,θ 是角度,bound_x 和 bound_y 应该小于原始矩形。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多