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

C Discussion :

Tracé de graphique type "nuage de points"


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 21
    Par défaut Tracé de graphique type "nuage de points"
    Bonjour à tous,

    Je cherche à tracer des graphiques de type nuage de points comme on en a sur les tableurs pour modéliser une courbe de dosage pHmétrique dans le cadre d'un cours.

    J'ai créé deux tableaux dans fonctions.h ; le 1er tableau qui me renvoie les abscisses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
        int i = 0;
        double Vb = 0;
     
        for (i = 0 ; i < 9 ; i++)
        {
            tableau[i] = Vb;
            printf("%f\n", tableau[i]);
            Vb=Vb+1;
        }
    }
    Un autre qui me trouve les ordonnées

    void tableaudupH(double *tableau, double Ca, double Cb, double Va)
    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
    {
        double diff = 0, som = 0, diffcar = 0, somcar = 0, h = 0, Vb = 0;
        int i = 0;
     
        for (i = 0 ; i < 9 ; i++)
        {
     
            diff = Ca*Va-Cb*Vb;
            som = 2*(Va+Vb);
            diffcar = pow(diff,2);
            somcar = pow(som,2);
            h = diff/(som)+sqrt(diffcar/somcar + pow(10,-14));
            tableau[i] = -log10(h);
            printf("%f\n", tableau[i]);
            Vb=Vb+1;
     
        }
    }
    Et voici mon main.c

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    // Inclusion des bibliothèques standards
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
     
    //Inclusion de la lib graphique
    #include <SDL2/SDL.h>
     
    // Inclusion d'un header maison qui va contenir les formules de calcul du pH
    #include "fonctions.h"
     
    int main (int argc, char** argv)
    {
     
    // Calcul des tableaux de valeur
        double Ca = 0.01, Cb = 0.1, Va = 10;
        double tableau[10] = {0};
     
        printf("Dosage d'un acide fort par une base forte\n");
     
       printf("Ceci est le tableau des valeurs du volume");
        tableauduvolume(tableau);
     
        printf("Ceci est le tableau des valeurs du pH");
        tableaudupH(tableau,Ca,Cb,Va);
     
     
     
    // A partir d'ici création de la fenêtre de graphique
    // création des variables
        int posX = 100, posY = 100, width = 640, height = 480;
     
    // initialisation de la vidéo
        SDL_Init(SDL_INIT_VIDEO);
     
    // création d'une fenêtre
        SDL_Window* window = NULL;
        window = SDL_CreateWindow("Dosage", posX, posY, width, height, SDL_WINDOW_SHOWN);
     
    // création d'un renderer de fond blanc
        SDL_Renderer* renderer = NULL;
        renderer =  SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED);
        SDL_SetRenderDrawColor( renderer, 255, 255, 255, 255 );
     
    // Remplissage du fond en blanc
        SDL_RenderClear( renderer );
     
    // Creation d'un rectangle de 10par10 à la position 300x100
        SDL_Rect rect;
        rect.x = 300;
        rect.y = 100;
        rect.w = 3;
        rect.h = 3;
     
    // On passe en bleu pour le rectangle
        SDL_SetRenderDrawColor( renderer, 0, 0, 255, 255 );
        SDL_RenderFillRect( renderer, &rect );
     
    // Mise à jour de l'écran avec le rectangle
        SDL_RenderPresent(renderer);
     
        // Wait for 5 sec SDL_Delay( 5000 );
     
        // on bloque la fenêtre à l'aide d'un event
        while (1) {
            SDL_Event e;
            if (SDL_PollEvent(&e)) {
                if (e.type == SDL_QUIT) {
                    break;
                }
            }
        }
     
    // On détruit tout proprement
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(window);
        SDL_Quit();
     
        return EXIT_SUCCESS;
    }
    Mon soucis est conceptuel. Je n'arrive pas à comprendre comment faire pour récupérer tableauduvolume[0] et l'assigner à rect.x

    (si j'arrive à comprendre cela je pense être capable de réitérer le processus pour assigner tableauduph[0] à rect.y ainsi qu'à créer une boucle pour parcourir tous les points).



    Merci de votre aide.

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Tu boucles toujours de 0 à 8 inclus mais ton tableau contient 10 cases, c'est voulu ?

    La première fonction ne fait rien d'autre que d'affecter la valeur du compteur à la case de même index dans le tableau.

    Tu écrases le contenu du tableau dans la seconde fonction, c'est voulu ?

    Je n'ai pas bien saisi ton interrogation : affiches le contenu de tableau et c'est tout, non ? Tu as seulement un adaptation d'échelles à faire en fonction de l'intervalle de tes valeurs en abscisses et ordonnées afin de les faire correspondre à la coordonnée du pixel correspondant.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 21
    Par défaut
    Tu boucles toujours de 0 à 8 inclus mais ton tableau contient 10 cases, c'est voulu ?
    Oups, en cours d'essais. Je modifie au fur et à mesure de mes tests. Mais pas rapport à mon problème ce n'est pas gênant.

    La première fonction ne fait rien d'autre que d'affecter la valeur du compteur à la case de même index dans le tableau.
    Oui pour les tests je reste sur un pas de 1. Plus tard quand l'essentiel sera fonctionnel je modifierai le pas ce qui modifiera cela. C'est donc normal pour le moment.

    Tu écrases le contenu du tableau dans la seconde fonction, c'est voulu ?
    Ha non, ça va tout me foutre en l'air ça

    Je n'ai pas bien saisi ton interrogation : affiches le contenu de tableau et c'est tout, non ? Tu as seulement un adaptation d'échelles à faire en fonction de l'intervalle de tes valeurs en abscisses et ordonnées afin de les faire correspondre à la coordonnée du pixel correspondant.
    Le programme me sort ça pour le moment :
    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
    21
    22
    23
    24
    Dosage d'un acide fort par une base forte
    Ceci est le tableau des valeurs du volume
    0.000000
    1.000000
    2.000000
    3.000000
    4.000000
    5.000000
    6.000000
    7.000000
    8.000000
    9.000000
     
    Ceci est le tableau des valeurs du pH
    2.000000
    7.000000
    11.920819
    12.187087
    12.330993
    12.425968
    12.494853
    12.547704
    12.589822
    Program ended with exit code: 0
    J'ai donc bien obtenu les valeurs que je voulais. Ce que je ne comprends pas comment faire c'est comment récupérer la valeur 0.000000 du 1er tableau pour l'affecter à la l'abscisse x (et après pareil pour les autres).
    En gros j'arrive à afficher les valeurs pas de soucis (mais en soit les afficher ne m'intéresse pas plus que ça, c'est juste une vérification que mes calculs sont corrects) mais je ne sais pas comment récupérer une valeur précise et l'affecter à une variable.
    J'espère que je suis clair cette fois


    Merci.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    écris tes tableaux sur une feuille.
    puis fais à la main le travail que tu espères de ton programme.

    Comment fais-tu, avec du vocabulaire simple?

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2016
    Messages : 21
    Par défaut
    écris tes tableaux sur une feuille.
    puis fais à la main le travail que tu espères de ton programme.
    A la main ou sous excel ce n'est pas un soucis, j'ai l'habitude de faire cela ^^

    Comment fais-tu, avec du vocabulaire simple?
    Je calcule les valeurs du volume et du pH.
    Je copie volume en abscisse et pH en ordonnée (et c'est ça que je ne comprends pas comment faire).

  6. #6
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Je ne suis toujours pas certain d'avoir compris : pour accéder aux valeurs de tes tableaux il suffit de les lire ! Tu as le droit d'utiliser tableauX[0], tableauX[1], tableauY[287], etc... dans n'importe quelle expression.


    Sinon tu as bien des points arbitraires en entrée. Perso plutôt que deux tableaux j'en ferais un seul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct point {
        double x, y;
    };
     
    struct point data[10];
    Afficher un point revient à l'exprimer dans un autre repère, par exemple en normalisant ses coordonnées dans un premier temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct point normalize(struct point p_in, double x_min, double x_max, double y_min, double y_max) {
        struct point p_out = {
            .x = (p_in.x - x_min) / (x_max - x_min),
            .y = (p_in.y - y_min) / (y_max - y_min)
        };
        return p_out;
    }
    ...avant de les transformer vers le repère de destination.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Graphique type nuage de points
    Par sophie_2525 dans le forum Excel
    Réponses: 5
    Dernier message: 17/02/2014, 15h42
  2. [XL-2003] Tracé graphique (nuage de point) avec liste déroulante comme source de l'abscisse
    Par rbonnard dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/03/2013, 13h08
  3. bibliothèque de génération des graphiques et des nuages de points
    Par georex dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/05/2012, 16h38
  4. [2K8] Problème avec un graphique de type nuage de point
    Par la_fouine1806 dans le forum SSRS
    Réponses: 0
    Dernier message: 07/10/2010, 14h37
  5. Type de graphique histhogramme-nuage de point
    Par god0126 dans le forum Access
    Réponses: 6
    Dernier message: 13/07/2006, 17h37

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