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

Graphisme Java Discussion :

Java Graphisme [Débutant(e)]


Sujet :

Graphisme Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut Java Graphisme
    Bonjour à tous,
    Je suis débutant en programmation Java, et je demande votre aide.
    J'essaie de programmer un programme qui représente à partir d'un tableau de valeur , une courbe avec des coordonnées en x et y.

    Bref, la partie qui me perturbe sont les graduations sur les axes...
    Car a partir des valeurs de mon fichiers csv, je détermine un pas entre chaque graduation ainsi que des valeurs minimales et maximales qui vont bien.
    Or je ne sais pas quelle boucle prendre pour tracer des graduations sur un axes..

    Merci d'avance pour vos réponses

  2. #2
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Bonjour

    Citation Envoyé par masterzik Voir le message
    Bref, la partie qui me perturbe sont les graduations sur les axes...
    Car a partir des valeurs de mon fichiers csv, je détermine un pas entre chaque graduation ainsi que des valeurs minimales et maximales qui vont bien.
    Or je ne sais pas quelle boucle prendre pour tracer des graduations sur un axes..
    Bah... une boucle "for", ça devrait le faire non?

    Disons qu'on s'occupe de l'axe des X...
    Tu veux graduer ton axe de A à B avec un pas de C. Ca te fait donc D=(B-A)/C intervalles (je te laisse jouer avec les arrondis pour avoir la bonne valeur... et attention avec les divisions entières...)

    Ton panel fait E pixels de large. Supposons que tu te gardes une marge de F pixels à droite et à gauche histoire de faire joli, ça te fait E-2*F pixels utiles, dans lesquels tu vas tracer ton axe de A à B. Soit un ratio de K=(E-2*F)/(B-A) pour passer des coordonnées réelles au coordonnées écran.

    Ensuite, il faut placer le x=0 au bon endroit: X0=-A*K (X0 étant le nombre de pixel depuis le bord gauche de ton panel, donc pour A<0, ça place ton x=0 à droite du bord gauche, donc dans le panel, pour A>0 ça le met à gauche, donc en dehors, mais pas d'inquiétude!)

    On reprend le calcul du nombre d'intervalles du début, en calculant combien on a de graduations côté x<0, et combien côté x>0. A gauche, Dneg=A/C, à droite Dpos=B/C, en valeur entière (on conserve les signes, ça sert dans la boucle)

    Du coup ta boucle donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i=Dneg;i<Dpos;i++) {
        x=i*C*K+X0+F
        // tu traces ton petit trais à x pixels de la gauche
    }
    idem pour l'axe des Y.

    A tester, je sors du petit-dej...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut
    Mes valeurs arrondies s'appellent gradmax et gradmin
    Mes extremum en pixel de mon axe X s'appellent "xpixelminabscisse" et "xpixelmaxabscisse", ces variables sont issues de formule prenant en compte les marges a droite et a gauche histoire de faire jolie comme vous le dites
    Mon pas s'appelle "valeurpas" c'est la valeur "decimal" et non en pixel..

    Est ce que ce serait possible de remplacer vos lettres par mes variables, juste pour que je puisses y voir claire !

    En tous cas, merci beaucoup pour votre réponse rapide !

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut Application..
    J'ai appliqué votre suggestion, en revanche pour le positionnement du x0 ..JE demande votre avis, car je définie autrement mon x0 en amont, pour le positionnement des axes.
    Je vous envoie le programme, histoire que vous compreniez bien de quoi je parle..

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    import java.applet.*;	// ou import java.applet.*;		nécessaire pour accéder à toutes les particularités des applets
    import java.awt.*;	// ou import java.awt.*;		nécessaire pour utiliser les fonctions graphiques de base
    import java.io.*;
    import java.net.*;
     
    public class tracagecourbemoi extends Applet {
    Double echellex;
    Double echelley;
    int MargeGauche;
    int MargeDroite;
    int MargeHaut;
    int MargeBas;	
    Double xmin = -10.0;
    Double xmax = 10.0;
    Double ymin = -10.0;
    Double ymax = 10.0;	
    String[] lignes = new String[2000];
    String fichier;
    Integer nbpoints;
    Double valeurpas;
    Double gradmin;
    Double gradmax;
    Double pasideal;
    Double valeurpasy;
    Double gradminy;
    Double gradmaxy;
    Double pasidealy;
     
    	public void start() {
    	// 1) Construire et paramétrer labels (zones de texte sous forme de classes Label)
    	Label titre = new Label("Graphe de Romain & Donovan", Label.CENTER);
    	titre.setBackground(Color.green);
    	titre.setForeground(Color.red);
    	//Label unitX = new Label("°C");
    	//Label unitY = new Label();
    	//unitY.setText("s");
    	// 2) Ajouter les objets Label créés dans la liste
    	add(titre);
    	//add(unitX);
    	//add(unitY);
    	// 3) Désactiver le positionnement automatique de chaque composant
    	//setLayout(null);
    	// 4) Positionner dans ce cas, individuellement, ces objets (x, y, h ,l)
    	titre.setBounds(10,10,getWidth()-20,20);
    	//unitX.setBounds(25,25,30,30);
    	fichier =getCodeBase().toString()+"courbe.csv";
    	nbpoints = lectureDunFichierTexteAuFormatCSV(fichier, lignes);
     
     
    // int zone =  getWidth()*0.9;	
     
    	echellex= (getWidth()*0.9/(xmax-xmin));	
    	echelley= (getHeight()*0.9/(ymax-ymin));
    	MargeGauche=(int)(0.05*getWidth());
    	MargeDroite=(int)(0.95*getWidth());
    	MargeHaut=(int)(0.05*getHeight());
    	MargeBas=(int)(0.95*getHeight());
     
    // Calcul du pas (fonctionnel)
    Double pasideal=((xmax-xmin)/10);
    Double valeurpas=Math.pow(10,Math.floor((Math.log10(pasideal))))*(Math.round((pasideal/Math.pow(10,Math.floor(Math.log10(pasideal))))));
     
    // Arrondi de la graduation minimale
    Double gradmin= (valeurpas*(Math.floor(xmin/valeurpas)));
     
    // Arrondi de la graduation maximale
    Double gradmax= (valeurpas*(Math.floor(xmax/valeurpas)));
     
     
    	} // fin de init
     
    //
    //
    //
    //
    //
    //	
     
    	public int lectureDunFichierTexteAuFormatCSV(String nomDuFichierCSV, String[] lesLignesLues) {
    		BufferedReader fichierTexteCSV = null;
    		Integer nombreDeLignesDeTexte = 0;
    		URL urlDuFichierCSV = null;
    		try {
    			urlDuFichierCSV = new URL(nomDuFichierCSV);
    			fichierTexteCSV = new BufferedReader(new InputStreamReader(urlDuFichierCSV.openStream()));
    			String entete = fichierTexteCSV.readLine();		// Pour récupérer cet entête, le déclarer plutôt en variable globale !
    			while ((lesLignesLues[nombreDeLignesDeTexte] = fichierTexteCSV.readLine()) != null) nombreDeLignesDeTexte++;
    			fichierTexteCSV.close();
    		} catch (Exception e) {return -1;}
    		return nombreDeLignesDeTexte;
    	}
     
     
    	public void paint(Graphics g) {		// Méthode appellée à tout moment au moindre changement
    		// Dessine un cadre, de 1 pixel d'épaisseur, au bord de la zone d'affichage de l'applet.
    		g.drawRect(0, 0, getWidth()-1, getHeight()-1);
    		//g.drawString(nbpoints.toString(),200,200);						// Dessine le nombre de point présents dans le CSV.
     
     
    //Tracage de l'axe des ordonnées 		-		//Tracage de l'axe des ordonnées 		-//Tracage de l'axe des ordonnées 		-//Tracage de l'axe des ordonnées
    		Integer xpix =(int) (((-xmin)*echellex)+MargeGauche);   		 
    	if (xmin>0) xpix=MargeGauche;
    	if (xmax<0) xpix=MargeDroite;
            int xpixelminordonne = xpix;
    		int ypixelminordonne = (int) (Math.round(0.05*getHeight()));
    		int ypixelmaxordonne = (int) (Math.round(0.95*getHeight()));
    		int xpixelmaxordonne = xpix; 
     
    //Tracage de l'axe des abscisses		-		//Tracage de l'axe des abscisses		-//Tracage de l'axe des abscisses		-//Tracage de l'axe des abscisses		-
    		Integer ypix = (int) (((-ymin)*echelley)+MargeHaut);
    	if (ymin>0) ypix=MargeBas;
    	if (ymax<0) ypix=MargeHaut;
    		int xpixelminabscisse = (int) (Math.round(0.05*getWidth()));
    		int ypixelminabscisse = ypix;
    		int ypixelmaxabscisse = ypix;
    		int xpixelmaxabscisse = (int)(Math.round(0.95*getWidth()));
     
     
    // Tracage de la flèche sur l'axe des abscisses 		- Tracage de la flèche sur l'axe des abscisses 		- Tracage de la flèche sur l'axe des abscisses 		-			
    int LongueurAxeX=(int)(0.95*getWidth());
    		int[]tabxabscisse = new int[]{LongueurAxeX,LongueurAxeX+5,LongueurAxeX};
    		int[]tabyabscisse = new int[]{ypix+2,ypix,ypix-2};
     
     
    // Tracage de la flèche sur l'axe des ordonnées		-	// Tracage de la flèche sur l'axe des ordonnées		-// Tracage de la flèche sur l'axe des ordonnées		-	
    int LongueurAxeY=(int)(0.05*getHeight());
    		int[]tabxordonnee = new int[]{xpix,xpix-2,xpix+2};
    		int[]tabyordonnee = new int[]{LongueurAxeY-5,LongueurAxeY,LongueurAxeY};		
     
     
    //Tracage de l'axe des abscisses		-		//Tracage de l'axe des abscisses		-//Tracage de l'axe des abscisses		-//Tracage de l'axe des abscisses		-
    		//g.drawString(ypix.toString(),100,100);			//Pour afficher la valeur xpix à l'écran
    		g.drawLine(xpixelminordonne,  ypixelminordonne,  xpixelmaxordonne, ypixelmaxordonne);
     
     
    //Tracage de l'axe des abscisses		-		//Tracage de l'axe des abscisses		-//Tracage de l'axe des abscisses		-//Tracage de l'axe des abscisses		-
    		//g.drawString(ypix.toString(),100,100);  		// Pour afficher la valeur ypix à l'écran
    		g.drawLine(xpixelminabscisse,  ypixelminabscisse,  xpixelmaxabscisse, ypixelmaxabscisse);
     
     
    		//Dessiner la flèche axe des abscisses et la colorier. 
    		g.drawPolygon(tabxabscisse,tabyabscisse,3);
    		g.fillPolygon(tabxabscisse,tabyabscisse,3);
     
    		//Dessiner la flèche axe des ordonnées et la colorier. 
    		g.drawPolygon(tabxordonnee,tabyordonnee,3);
    		g.fillPolygon(tabxordonnee,tabyordonnee,3);
     
     
    			//Graduation (beta)
    	// Calculs pour Graduation en x :
     
    	// Calcul du pas (fonctionnel)
    Double pasideal=((xmax-xmin)/10);
    Double valeurpas=Math.pow(10,Math.floor((Math.log10(pasideal))))*(Math.round((pasideal/Math.pow(10,Math.floor(Math.log10(pasideal))))));
    //g.drawString(valeurpas.toString(),100,100);	
    // Arrondi de la graduation minimale
    Double gradmin= (valeurpas*(Math.floor(xmin/valeurpas)));
    //g.drawString(gradmin.toString(),200,100);	
    // Arrondi de la graduation maximale
    Double gradmax= (valeurpas*(Math.floor(xmax/valeurpas)));
    //g.drawString(gradmax.toString(),300,100);	
    ///////////////////////////////////////////////////////////////////
    Integer nbintervals= (int)((gradmax-gradmin)/valeurpas);
    //g.drawString(nbintervals.toString(),400,200);
    Integer ratio=(int)((xpixelmaxabscisse-xpixelminabscisse)/(gradmax-gradmin));
    //g.drawString(ratio.toString(),400,300);
    //Integer X0= (int)(-gradmin*ratio);
    Integer Dneg=(int)(gradmin/valeurpas);
    Integer Dpos= (int) (gradmax/valeurpas);
    int xref;
    for (int i=Dneg;i<Dpos;i++) {
        xref=(int)(i*valeurpas*ratio+xpix);
    	g.drawLine(xref, 290, xref, 310);
    	g.setColor(Color.red);
        // tu traces ton petit trais à x pixels de la gauche
    }
     
    	// Calculs pour Graduation en y :
     
    	// Calcul du pas (fonctionnel)
    Double pasidealy=((ymax-ymin)/10);
    Double valeurpasy=Math.pow(10,Math.floor((Math.log10(pasidealy))))*(Math.round((pasidealy/Math.pow(10,Math.floor(Math.log10(pasidealy))))));
    //g.drawString(valeurpasy.toString(),100,100);	
    // Arrondi de la graduation minimale
    Double gradminy= (valeurpasy*(Math.floor(ymin/valeurpasy)));
    //g.drawString(gradminy.toString(),200,100);	
    // Arrondi de la graduation maximale
    Double gradmaxy= (valeurpasy*(Math.floor(ymax/valeurpasy)));
    //g.drawString(gradmaxy.toString(),300,100);	
    ///////////////////////////////////////////////////////////////////
    Integer nbintervalsy= (int)((gradmaxy-gradminy)/valeurpasy);
    //g.drawString(nbintervalsy.toString(),400,200);
    Integer ratioy=(int)((ypixelmaxordonne-ypixelminordonne)/(gradmaxy-gradminy));
    //g.drawString(ratioy.toString(),400,300);
    //Integer X0= (int)(-gradmin*ratio);
    Integer Dnegy=(int)(gradminy/valeurpasy);
    Integer Dposy= (int) (gradmaxy/valeurpasy);
    int yref;
    for (int a=Dnegy;a<Dposy;a++) {
        yref=(int)(a*valeurpas*ratio+ypix);
    	g.drawLine(440, yref, 460, yref);
    	g.setColor(Color.blue);
        // tu traces ton petit trais à y pixels de la gauche
    }
    } 
     
     
     
    	// fin de paint
     
    } // Fin de l'applet

  5. #5
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 817
    Par défaut
    Citation Envoyé par masterzik Voir le message
    JE demande votre avis, car je définie autrement mon x0 en amont, pour le positionnement des axes.
    Non, tu le définis comme moi.
    Un facteur d'échelle, et tu rajoutes le décalage de la marge (sauf que toi tu l'intègres de suite, alors que moi je l'intègre quand je trace la ligne).
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 9
    Par défaut
    J'obtiens ceci...
    Avec ces valeurs :
    Double xmin = -5.0;
    Double xmax = 10.0;
    Double ymin = -5.0;
    Double ymax = 5.0;
    Nom : Sans titre 1.jpg
Affichages : 102
Taille : 56,7 Ko

Discussions similaires

  1. Base du graphisme sous Java
    Par ritchie23 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 23/10/2008, 17h05
  2. Graphisme pour un jeux java sur mobile
    Par marocleverness dans le forum Java ME
    Réponses: 4
    Dernier message: 15/03/2007, 15h53
  3. Graphisme en java
    Par bourinator dans le forum Graphisme
    Réponses: 4
    Dernier message: 18/06/2006, 13h40
  4. Projet entierement en JAVA [client, serveur, graphismes]
    Par arsenik7 dans le forum Général Java
    Réponses: 32
    Dernier message: 07/02/2006, 17h44

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