计算给定纵横比的外接矩形

Calculate enclosing rectangle of a given aspect ratio

给定任意大小和纵横比的矩形的高度和宽度,如何计算给定纵横比的最小外接矩形的高度和宽度?

在代码中,函数签名如下所示

public Size getMinimumEnclosingRectangle(Size originalRectangle, float aspectNumerator, float aspectDenomiator);

对该函数的调用看起来像

originalRectangle    AspectRatio     Result
-------------------------------------------
100x100              1:2             100x200
64x32                1:1             64x64
125x100              3:2             150x100
100x345              1:3             115x345

这可能不是最好的方法,但我进行此计算的方法是计算纵横比的变化,然后根据 width/height 计算得出的结果。下面是一些代码,用于在实践中说明该算法:

var sourceImages = [
 {width: 100, height: 100, toAspectRatio:1/2  },
 {width: 64,  height: 32,  toAspectRatio:1/1  },
 {width: 125, height: 100, toAspectRatio:3/2  },
 {width: 100, height: 345, toAspectRatio:1/3 },
 {width: 345, height: 100, toAspectRatio:1/3 }
];


function calculateNewSize( sourceWidth, sourceHeight, toAspectRatio )
{
 var aspectRatioChange = (sourceWidth / sourceHeight) / toAspectRatio;
 var fitWidth = aspectRatioChange < 1 ? sourceHeight * toAspectRatio : sourceWidth;
 var fitHeight = aspectRatioChange >= 1 ? sourceWidth / toAspectRatio : sourceHeight;

 console.log('(' + aspectRatioChange + ') ' + sourceWidth + " x " + sourceHeight + " -> " 
    + toAspectRatio + ' -> ' + fitWidth + ' x ' + fitHeight); 
}

sourceImages.forEach(function(source) {
 calculateNewSize(source.width, source.height, source.toAspectRatio);
});