给定一个矩形 S,纵横比为 sx/sy,以及另外两个矩形 A(纵横比为 ax/ay)和 B(纵横比为 bx/by),我如何找出形状 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;
}