Как определить, какое соотношение сторон ближе всего

Дана прямоугольная форма S с соотношением сторон sx/sy и две другие прямоугольные формы A (с соотношением сторон ax/ay) и B ( с соотношением сторон bx/by) как я могу узнать, какая из фигур A или B имеет самое близкое соотношение сторон к S? Размеры фигур значения не имеют.

Является ли это просто тем, что из (sx/sy)/(ax/ay) и (sx/sy)/(bx/by) ближе всего к 1?

Что я на самом деле пытаюсь сделать, так это выяснить, какая форма на слайде PPTX лучше всего соответствует изображению, размер которого будет изменен, а затем обрезан, чтобы соответствовать этой форме. Я предполагаю, что другим подходом было бы определить, какая форма приводит к наименьшему количеству потерянных пикселей, хотя в моем коде будет проще, если я смогу сделать это, сравнив соотношения сторон.

В итоге я остановился на приведенном ниже алгоритме, реализованном следующим образом (спасибо Мэтту Боллу за его отзыв):

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;
}
7
задан Martin Wilson 11 December 2017 в 18:59
поделиться