如何将一个矩形缩放到另一个矩形内的最大尺寸?

我有一个源矩形和一个目标矩形。 我需要find在拟合目标矩形的同时可以缩放信号源的最大比例,并保持其原始高宽比

谷歌find了一个办法,但我不知道它是否适用于所有情况。 这是我家酿的解决scheme:

  • 计算每个矩形的高度/宽度。 这给出了对angular线msrcmdest
  • 如果msrc < mdst ,则缩放源宽度以适合目标宽度 (以及相同比例的缩放高度)
  • 否则,缩放源高度以适合目标高度 (以相同的比例缩放宽度)

寻找其他可能的解决scheme来解决这个问题 我甚至不确定我的algorithm是否适用于所有情况!

 scale = min( dst.width/src.width, dst.height/src.height) 

这是你的方法,但写得更干净。

另一个选项可能是缩放到最大宽度,然后检查缩放高度是否大于最大允许高度,如果是按高度缩放(反之亦然):

 scale = (dst.width / src.width); if (src.height * scale > dst.height) scale = dst.height / src.height; 

我认为这个解决scheme更短,更快,更易于理解。

  1. 计算出destWidth / srcWidthdestHeight / srcHeight较小的destHeight / srcHeight
  2. 按比例缩放

编辑它当然是相同的你的方法,公式的部分移动。 我的意见是,这在语义上更清楚,但只是 – 一个意见。

如果所有维度都是非零的,我会使用下面的代码(基本上匹配你的代码)。

 scaleFactor = (outerWidth / outerHeight > innerWidth / innerHeight) ? outerHeight / innerHeight : outerWidth / innerWidth 

这也可以修改,以允许任何维度如果需要为零。