Dato una forma rettangolare S, con proporzioni sx/sy, e due altre forme rettangolari A (con rapporto proporzionale ax/aa) e B (con rapporto larghezza/altezza bx/per) come può Scopro quale di forma A o B ha lo aspect ratio più vicino a S? Le dimensioni delle forme non sono importanti.Come determinare quali rapporti sono più vicini
È solo quello di (sx/sy)/(ax/ay) e (sx/sy)/(bx/by) è più vicino a 1?
Quello che sto effettivamente cercando di fare è scoprire quale forma su una diapositiva PPTX si adatta meglio a un'immagine che verrà ridimensionata e quindi ritagliata per adattarla a quella forma. Immagino che un altro approccio sarebbe quello di capire quale forma si traduce con il minor numero di pixel persi, sebbene nel mio codice sarà più facile se riuscirò a farlo confrontando le proporzioni.
Alla fine sono andato con l'algoritmo di seguito, implementato nel modo seguente (grazie a Matt Ball per il suo 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;
}
Inizialmente ci ho pensato, ma penso che funzioni solo se assumiamo che tutte le forme abbiano X> Y (o viceversa).Ad esempio, per le immagini verticali, le proporzioni sono sempre una frazione; per il paesaggio è un numero intero. Fammi sapere se mi sbaglio su questo però - grazie –
Supponiamo che 'target_ratio' sia' 1', 'a_ratio' è' 1.1', e 'b_ratio' è' 0.5' (quindi la risposta corretta è 'a_ratio') . Quindi hai '| -0.1 | <| 0.5 | 'o' 0.1 <0.5' quindi il caso 'if' è' true', quindi otteniamo 'a_ratio' dall'algoritmo pseudocodice. Quindi funziona bene quando si usa un mix di paesaggio e ritratto. –
Ho appena implementato questo nel mio codice e funziona perfettamente - grazie :-) –