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

Langage Java Discussion :

Faire la moyenne d'un flux de données dans une classe dédiée.


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Par défaut Faire la moyenne d'un flux de données dans une classe dédiée.
    Bonjour,
    Le titre est compliqué, mais ce que je cherche à faire est simple. Je cherche à utiliser une classe pour traiter des données provenant d'un capteur de type Kinect : je reçois, pour simplifier, un flux de floats, et je cherche à faire la moyenne de ces données par paquets de 3.

    Le code qui m'est venu à l'esprit est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class MathTools {
     
    private static float moy = 0f;
    private static float calc = 0f;
    private static int indice = 0;
     
    public MathTools() {
    }
     
    public static float moyenne(float valeur) {
        indice++;
        calc += valeur;
        if (indice == 3) {
            moy = calc/3.0;
            ind = 0;
            calc = 0f;
        }
        return moy;
    }
    }
    L'idée est d'utiliser la fonction MathTools.moyenne(valeur) pour renvoyer un calcul de la moyenne de mon flux de données tous les 3 chiffres qui lui parviennent :
    1 --> MathTools.moyenne(1) = 0
    2 --> MathTools.moyenne(2) = 0
    3 --> MathTools.moyenne(3) = (1 + 2 + 3)/3 = 2
    4 --> MathTools.moyenne(4) = 2
    5 --> MathTools.moyenne(5) = 2
    6 --> MathTools.moyenne(6) = (4 + 5 + 6)/3 = 5
    7 --> MathTools.moyenne(7) = 5
    8 --> MathTools.moyenne(8) = 5
    9 --> MathTools.moyenne(9) = (7 + 8 + 9)/3 = 8
    etc.

    La fonction est correcte et fonctionne, mais le problème que je rencontre est le suivant : comme ma fonction est statique, je ne peux PAS l'utiliser plusieurs fois pour plusieurs flux de valeurs. Puisque les variables sont les identiques (static), deux versions de cette fonction vont interagir et le résultat sera faussé.

    La seconde idée qui m'est venue est d'utiliser une fonction et des variables NON statiques, mais dans ce cas, je doit définir autant d'instances de cette classe qu'il y a de fonction moyenne(), ce qui n'est vraiment pas pratique !!! J'aurais voulu utiliser des fonctions comme celles de la classe java.lang.Math par exemple (elles sont toutes statiques). La différence entre ces fonctions et la mienne est que je suis obligé (sauf erreur de ma part) d'utiliser des variables extérieures à ma fonction pour faire le calcul (indice, calc, moy).

    Auriez-vous une idée pour faire ce genre de calcul dans une classe ? J'avoue que je sèche un peu...

    Cordialement,

    RP.

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Je ne comprend pas trop ce qui te pose problème avec l'utilisation d'instances...
    Au contraire c'est pile poil ce qu'il faut faire.

    Les champs static modifiables posent toujours ce genre de problème...



    Sinon c'est voulu ces sauts tous les 3 valeurs ?
    Ne serait-il pas préférable d'avoir une progression continue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1 --> MathTools.moyenne(1) = 1/3 = 0.33
    2 --> MathTools.moyenne(2) = (1 + 2)/3 = 1 
    3 --> MathTools.moyenne(3) = (1 + 2 + 3)/3 = 2
    4 --> MathTools.moyenne(4) = (2 + 3 + 4)/3 = 3
    5 --> MathTools.moyenne(5) = (3 + 4 + 5)/3 = 4
    6 --> MathTools.moyenne(6) = (4 + 5 + 6)/3 = 5
    7 --> MathTools.moyenne(7) = (5 + 6 + 7)/3 = 6
    8 --> MathTools.moyenne(8) = (6 + 7 + 8)/3 = 7
    9 --> MathTools.moyenne(9) = (7 + 8 + 9)/3 = 8

    a++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Par défaut
    Merci de ta réponse.

    Oui les sauts de valeurs ne me dérangent pas. Mais j'ai du mal me faire comprendre... Si je cherche à faire la moyenne de chacun de 3 flux de données provenant, par exemple, des positions x, y et z d'une Kinect, je ne peux pas utiliser ma fonction de la façon suivante :

    float positionX, positionY, positionZ;

    ...

    positionX = MathTools.moyenne(valeursX);
    positionY = MathTools.moyenne(valeursY);
    positionZ = MathTools.moyenne(valeursZ);

    System.out.println ("Positions = " + positionX + ", " + positionY + ", " + positionZ);

    Cela ne marche pas car chaque moyenne utilise les mêmes variables (puisqu'elles sont statiques). C'est ça mon problème : je cherche à faire une fonction dans une classe qui renvoie le bon calcul.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Par défaut
    Les instances me gênent car il faut créer UNE instance par fonction moyenne()...

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Et alors ? tu veux calculer 3 moyennes donc tu crées 3 instances.
    Dès que tu dois gérer un état je ne vois pas comment tu pourrais passer outre, ni en quoi cela pose problème...


    a++

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Par défaut
    Disons que je cherchais une solution plus pratique que de créer autant d'instances que de fonctions !

    Quand j'utilise plusieurs sin(x) dans une fonction, je ne crée pas autant d'instance de java.lang.Math que de sinus... Dans mon cas de figure, c'est un peu différent car le calcul de la fonction est fait en mémorisant 2 valeurs précédentes pour calculer la moyenne sur la 3è valeur, mais si, pour reprendre l'exemple de Kinect qui restitue une dizaine de flux de données pour chaque point du squelette, je dois créer dix instances de ma classe, cela ne me semble pas optimum...

Discussions similaires

  1. Récupération d'une donnée dans une classe
    Par Alice23 dans le forum Windows Phone
    Réponses: 26
    Dernier message: 07/01/2012, 12h01
  2. [JpGraph] Faire le tableau array($abc) à partir des données d'une table
    Par medhan dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 14/11/2008, 11h35
  3. Comment faire apparaitre des données dans une listbox
    Par nuans dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 14/05/2007, 15h04
  4. [MySQL] Php, je ne comprends pas comment faire pour introduire des données dans une table
    Par Liondd dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 14/12/2006, 12h53
  5. Réponses: 2
    Dernier message: 28/10/2005, 12h52

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