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

Agn*_*ian 59 algorithm scaling

我有一个源矩形和一个目标矩形.我需要找到在适合目标矩形并保持其原始高宽比时可以缩放源的最大比例.

Google找到了一种方法,但我不确定它是否适用于所有情况.这是我自制的解决方案:

  • 计算每个矩形的高度/宽度.这给对角线的斜坡msrcmdest.
  • 如果msrc < mdst,缩放源宽度以适合目标宽度(和比例高度相同的比例)
  • 否则,缩放源高度以适合目标高度(和比例宽度相同的比例)

寻找这个问题的其他可能的解决方案.我甚至不确定我的算法是否适用于所有情况!

tom*_*m10 116

scale = min( dst.width/src.width, dst.height/src.height)
Run Code Online (Sandbox Code Playgroud)

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

  • 相同的解决方案,但我的名字更清晰:`scale = min(maxWidth/actualWidth,maxHeight/actualHeight)`,`newWidth = actualWidth*scale`,`newHeight = actualHeight*scale`. (13认同)
  • 甜!获得比例后,使用这些来获得最终尺寸:`width = src.width*scale`和`height = src.height*scale` (8认同)
  • 如果要覆盖整个目的地区域,请使用max更改min. (8认同)

Gus*_*uss 10

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

scale = (dst.width / src.width);
if (src.height * scale > dst.height)
 scale = dst.height / src.height;
Run Code Online (Sandbox Code Playgroud)

我认为这个解决方案更短,更快,更容易理解.