Для прямоугольной формы S с соотношением сторон sx/sy и двумя другими прямоугольными формами A (с отношением сторон ax/ay) и B (с форматным соотношением bx/by), как можно Я узнаю, какая форма A или B имеет самое близкое соотношение сторон к S? Размеры фигур несущественны.Как определить, какие пропорции ближе всего
Это только то, что из (sx/sy)/(ax/ay) и (sx/sy)/(bx/by) ближе всего к 1?
То, что я на самом деле пытаюсь сделать, это выяснить, какая форма на слайде PPTX наилучшим образом соответствует изображению, которое будет изменено, а затем обрезано, чтобы соответствовать этой форме. Я предполагаю, что другой подход заключается в том, чтобы определить, какая форма приводит к тому, что наименьшее количество пикселей будет потеряно, хотя в моем коде будет легче, если я смогу это сделать, сравнив пропорции.
В конце концов я пошел с ниже алгоритма реализуется следующим образом (благодаря Matt Болл для его обратной связи):
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;
}
Я думал об этом изначально, но я думаю, что он работает только, если мы предположим, что все формы имеют X> Y (или наоборот).Например, для портретных изображений соотношение сторон всегда является долей; для пейзажа это целое число. Дайте мне знать, если я ошибаюсь в этом вопросе - спасибо –
Предположим, что 'target_ratio' -' 1', 'a_ratio' -' 1.1', а 'b_ratio' -' 0,5' (поэтому правильный ответ - 'a_ratio') , Тогда у вас есть '| -0.1 | <| 0,5 | 'или' 0.1 <0.5', поэтому случай 'if' является' true', поэтому мы получаем 'a_ratio' из псевдокода. Так что это прекрасно работает при использовании сочетания пейзажа и портрета. –
Просто реализовано это в моем коде, и он отлично работает - спасибо :-) –