108 votes

Quel est l'algorithme de calcul du rapport hauteur/largeur ?

Je prévois de l'utiliser avec JavaScript pour recadrer une image afin qu'elle s'adapte à l'ensemble de la fenêtre.

Editer : J'utiliserai un composant tiers qui n'accepte que le rapport d'aspect dans un format tel que : 4:3 , 16:9 .

~12 ans edit : ce genre de question est plutôt intéressant ! Il y a quelque chose ici, n'est-ce pas ? Absolument !

1voto

sleepycal Points 961

Sur la base des autres réponses, voici comment j'ai obtenu les chiffres dont j'avais besoin en Python ;

from decimal import Decimal

def gcd(a,b):
    if b == 0:
        return a
    return gcd(b, a%b)

def closest_aspect_ratio(width, height):
    g = gcd(width, height)
    x = Decimal(str(float(width)/float(g)))
    y = Decimal(str(float(height)/float(g)))
    dec = Decimal(str(x/y))
    return dict(x=x, y=y, dec=dec)

>>> closest_aspect_ratio(1024, 768)
{'y': Decimal('3.0'), 
 'x': Decimal('4.0'), 
 'dec': Decimal('1.333333333333333333333333333')}

1voto

chiconese Points 95
function ratio(w, h) {
    function mdc(w, h) {
        var resto;
        do {
            resto = w % h;

            w = h;
            h = resto;

        } while (resto != 0);

        return w;
    }

    var mdc = mdc(w, h);

    var width = w/mdc;
    var height = h/mdc;

    console.log(width + ':' + height);
}

ratio(1920, 1080);

0voto

Tobias Cohen Points 14390

Je pense que cela répond à votre demande :

webdeveloper.com - de la décimale à la fraction

La largeur/hauteur donne une décimale, convertie en fraction avec " :" à la place de "/", elle donne un "ratio".

0voto

Nosredna Points 33670

Cet algorithme en Python vous permet de faire une partie du chemin.


Dites-moi ce qui se passe si la fenêtre a une taille inhabituelle.

Vous devriez peut-être disposer d'une liste de tous les ratios acceptables (pour le composant tiers). Ensuite, il faut trouver le rapport le plus proche de votre fenêtre et le renvoyer à partir de la liste.

0voto

Aron Points 9

Il s'agit d'une façon un peu étrange de procéder, mais la résolution est utilisée comme aspect. PAR EXEMPLE

1024:768

ou vous pouvez essayer

var w = screen.width;
var h = screen.height;
for(var i=1,asp=w/h;i<5000;i++){
  if(asp*i % 1==0){
    i=9999;
    document.write(asp*i,":",1*i);
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X