8

縦横比 sx/sy の長方形 S と、他の 2 つの長方形 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;
}
4

2 に答える 2

3

(sx/sy)/(ax/ay) と (sx/sy)/(bx/by) のどちらが 1 に近いですか?

それは合理的に聞こえます。差を最小限に抑えることもできます。

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は彼の質問を更新して、彼が使用したアルゴリズムを含めました。これはうまく機能しているようです。

于 2012-05-02T15:05:43.603 に答える
3

上記の提案を見て、私は確信していません:

次の例を考えてみましょう: A = 1:2 B = 2:1 および

ターゲット比率 = 1:1

明らかに、A と B の両方が等しく適しているはずですが、比較すると

( 1 - GoalAR/CandiateAR) 提案どおり、

アスペクト比候補 A = 0.5 [ 1 : 2 ]

アスペクト比候補 B = 2 [ 2 : 1 ]

あなたが得るだろう

近さスコアA = 1

近さスコアB = 0.5

縦横比を比較する最良の方法は、角度を定義するものと考えることです。

tan(o) = h/w

o = atan(h/w)

次に、角度の違いを簡単に比較できます。

于 2014-04-09T00:04:33.917 に答える