给定长宽比为sx/sy的矩形S,以及其他两个长宽比为ax/ay的矩形A和长宽比为bx/by的矩形B,我如何找出形状A或B中的哪一个具有最接近S的长宽比?形状的大小并不重要。

(sx/sy)/(ax/ay)和(sx/sy)/(bx/by)中哪一个最接近1?

我实际上想做的是找出PPTX幻灯片上哪种形状最适合要调整大小的图像,然后对其进行裁剪以适合该形状。我猜想另一种方法是找出哪种形状会导致丢失最少的像素,尽管在我的代码中,如果可以通过比较宽高比来做到这一点会更容易。

最后,我继续使用以下算法,该算法实现如下(感谢Matt Ball的反馈):

ShapeInPPTXLocation closest;
double imageAR = a_imageDim.getWidth()/a_imageDim.getHeight();
double aspectRatioCandidateA = a_candidateA.getWidth()/a_candidateA.getHeight();
double aspectRatioCandidateB = a_candidateB.getWidth()/a_candidateB.getHeight();
double closenessScoreA=1-(imageAR/aspectRatioCandidateA);
double closenessScoreB=1-(imageAR/aspectRatioCandidateB);

if (Math.abs(closenessScoreA) <= Math.abs(closenessScoreB))
{
    closest=a_candidateA;
}
else
{
    closest=a_candidateB;
}

最佳答案



听起来很合理。您也可以将差异最小化:

let target_ratio = sx/sy
let a_ratio = ax/ay
let b_ration = bx/by

if |target_ratio - a_ratio| < |target_ratio - b_ratio|
    a_ratio is closer to target
else
    b_ratio is closer to target

更新:此答案中的算法不太起作用,如以下注释中所述。 OP更新了他的问题,以包括他使用的算法,该算法似乎工作正常。

关于algorithm - 如何确定最接近的宽高比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10416366/

10-12 13:20