IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Mise à l'échelle d'un histogramme


Sujet :

2D Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Points : 64
    Points
    64
    Par défaut Mise à l'échelle d'un histogramme
    Bonjour,
    Je dessine un histogramme de deux images différentes j'ai essayé que celle-ci aie presque le même max comme vous pouvez le voir pour vous expliquer mon prb. L'affichage de la quantité de la deuxieme est beaucoup plus petite que le deuxieme alors que la valeur du max n'est pas tres differente !!
    j'aimerai bien pouvoir faire une mise à echelle ou qqch comme ça pour bien voir l'histogramme. Pouvez vous m'aider svp

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ceci n'a strictement rien à voir avec Java ! C'est des maths, de base même (règle de 3, et du Thalès, je dirais).

    Si tu as une quantité H (la hauteur du composant), et que tu veux adapter une quantité M (la valeur max de ton composant), il te faut trouver un coefficient c tel que H=M×c. Ainsi, le max aura la hauteur du composant. Et toutes les autres valeurs multipliées par le coefficient c seront à l'échelle. c c'est même le facteur d'echelle à appliquer dans l'axe voulu (à priori vertical), si on veut utiliser une transformée affine pour mettre à l'échelle (si le min n'est pas 0, il faudra combiner avec une translation, et là aussi le coefficient d'applique). Si tu as un autre ensemble de valeur dont le max est M1, alors H=M1×c1.
    Il te reste à calculer c, tel que H=M×c.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Points : 64
    Points
    64
    Par défaut
    Bien entendu, mais ce que je ne comprends pas (et c'est ce que je pense un prb java) et comme vous voyez 2 images qui ont presque le meme max, alors la représentation de leur max n'est pas la même

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Bah, "presque le même max", déjà ça ne veut pas dire grand chose. Par rapport à un référentiel de 10 Millions, certes, la différence est négligeable. Par rapport à un référentiel de 10, non, il y a une différence de près de 2000%.

    Tu fais un calcul d'echelle ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     double surfaceImage = image.getWidth()*image.getHeight();
    	      double surfaceHistogramme = histogramme.getWidth()*histogramme.getHeight();
    	      dessin.scale(1, -surfaceHistogramme/surfaceImage/3.7);
    C'est quoi cette formule ? Et en plus tu utilises le coefficient résultant sur l'axe des Y uniquement (un rapport de surface pour établir une mise à l'échelle selon un seul axe).
    En tout cas, ce n'est pas le rapport dont j'ai parlé.

    Alors on a un histogramme de 256×200=51200.

    Une image dont la surface est 48058 : 51200/45058/3.7 = 0,31. le max est 1099, donc entre 0 et le max on a 341 pixels environ.
    Une image dont la surface est 18093 : 51200/18093/3.7 = 0,76. le max est 1287, donc entre 0 et le max on a 978 pixels environ.

    Soit 637 pixels de différence !

    En plus il faut ajouter la translation. Si j'applique la transformée complète, j'obtiens 1287=>-784, et 1099=>-116. Cela fait donc aussi un sacré écart. Sans parler du fait que c'est en dehors de l'image dans les deux cas (!).

    Bon, j'ai supposé que 48058 et 18093, c'était la surface (le nombre de pixels) des images...mais là aussi ce n'est peut-être même pas en rapport (pour peu que ça soit la somme des niveaux de bleus, ce ne serait pas impossible, comme on va le voir ci-après), mais comme je n'ai pas tout le code, je fais des suppositions.

    Parce que le pire, c'est que le max qui est affiché en bas n'est pas à priori exactement le max de ce qu'on affiche... je dis à priori parce que là assi, il faut faire de la divination pour remplir les trous.
    Donc je devine que les horreurs suivantes (static = horreur !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     static int sum;
     static int max;
     static int position;
     static int med;
    servent à afficher les trucs en bas à gauche (au moins le max).
    Tu appelles successivement la même méthode pour dessiner 3 histogrammes. L'un en rouge , l'un en bleu et l'un en vert (avec alpha=40%). Première surprise : l'image que tu montres ne contient que des lignes noires Est-ce bien le bon code ? Peut-être est-ce dû à la superposition. Mais vu les écarts théoriques calculés ci-avant, je trouve ça bizarre que les histogrammes soient même visibles (et non pas partiellement hors de l'image).
    Toujours est-il que si c'est le bon code, le max, med, position et sum correspondent aux valeurs de l'histogramme des bleus, car l'appel servant à le produire à écraser les valeurs affectées par les appels des deux autres passés avant. A moins que les trois histogrammes aient les mêmes caractéristiques, on essaye de comparer des machins pas comparables, et de comparer de visu des trucs à priori non visibles !!!


    Donc commence par commenter les tracés des histogrammes verts et bleus et regarde ce que ça donne : tu pourras comparer des choses qui sont en rapport. Ensuite, applique une adaptation d'échelle qui a un sens. Et regarde ce que ça donne.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Mise à l'échelle des repères
    Par cmail dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 28/05/2009, 19h02
  2. Réponses: 1
    Dernier message: 03/12/2008, 13h53
  3. [HTML] Impression en format paysage et mise à l'échelle
    Par Bernardtapis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/03/2008, 08h45
  4. Mise à l'échelle d'écran
    Par Stevens.Georges dans le forum Langage
    Réponses: 1
    Dernier message: 04/12/2007, 14h13
  5. Réponses: 2
    Dernier message: 19/09/2007, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo