Gegeben eine rechteckige Form S mit Seitenverhältnis sx/sy und zwei andere rechteckige Formen A (mit Seitenverhältnis ax/ay) und B (mit Seitenverhältnis bx/by) wie Ich finde heraus, welche von Form A oder B das nächste Seitenverhältnis zu S hat? Die Größen der Formen sind unwichtig.So ermitteln Sie, welche Seitenverhältnisse am nächsten sind
Ist nur das von (sx/sy)/(ax/ay) und (sx/sy)/(bx/by) am nächsten an 1?
Was ich eigentlich versuche herauszufinden ist, welche Form auf einer PPTX-Folie am besten zu einem Bild passt, das in der Größe angepasst und dann zugeschnitten wird, um zu dieser Form zu passen. Ich denke, ein anderer Ansatz bestünde darin, herauszufinden, welche Form zu dem Verlust der wenigsten Pixel führt, obwohl es in meinem Code einfacher ist, wenn ich es durch Vergleichen der Seitenverhältnisse tun kann.
Am Ende habe ich mit dem Algorithmus unten ging, wie folgt umgesetzt (dank Matt Ball für sein Feedback):
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;
}
Ich dachte zuerst darüber nach, aber ich denke, es funktioniert nur, wenn wir annehmen, dass alle Formen X> Y (oder umgekehrt) haben.Zum Beispiel ist das Seitenverhältnis für Portraitbilder immer ein Bruchteil; Für Landschaft ist es eine ganze Zahl. Lass es mich wissen, wenn ich falsch liege - danke –
Angenommen, 'target_ratio' ist' 1', 'a_ratio' ist' 1.1' und 'b_ratio' ist' 0.5' (also die richtige Antwort ist 'a_ratio') . Dann hast du '| -0.1 | <| 0.5 | 'oder' 0.1 <0.5', so dass der 'if' Fall 'wahr' ist, also erhalten wir' a_ratio' vom Pseudocode-Algorithmus. Das funktioniert also gut, wenn Sie eine Mischung aus Quer- und Hochformat verwenden. –
Habe das einfach in meinem Code implementiert und es funktioniert perfekt - danke :-) –