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

AWT/Swing Java Discussion :

Aide: Tracer un camembert à la main


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut Aide: Tracer un camembert à la main
    Bonjour,

    Je voudrais réaliser un camembert fait maison.
    Pour cela, je dessine un cercle, puis une droite de départ pour dessiner mes parts à partir de là si il y en a au moins 2.


    Le problème pour moi, c'est pour dessiner les autres droites. Je récupère mes valeurs dans un vecteur, et je calcule l'angle de chaque part pour dessiner la droite qui va la délimiter. Mon idée, c'est de toujours dessiner la part par rapport ma droite de départ, donc j'ai deux angles, l'angle total parcouru jusqu'ici, et l'angle à ajouter. L'angle à ajouter va me permettre de colorer ma part en dessinant un triangle de point centre de mon cercle et de droite derniere droite dessinée-avant derniere droite dessinée.
    Je sais, c'est pas très facile à comprendre, mais je vois pas comment expliquer plus simplement.


    Donc, mon souci pour le moment, c'est à partir d'un point donné (le centre de mon cercle), de ma droite de départ, tracer ma droite grâce à l'angle calculé.


    J'ai ca comme code 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public void paint(Graphics g){
    	//le nombre de budgets dans notre vecteur
    	int nbBudgets=budget.getListeCategorie().size();
    	// Le montant du bugdet i du vecteur
    	double montantBudget=0;
    	// L'intitule du budget i du vecteur
    	String nomBudget = null;
    	//La somme des budgets dans le vecteur
    	double montantTotal = 0;
    	// l'angle de la proportion du budget par rapport au budget total
    	float angleBudget = 0;
    	// L'angle parcouru depuis le départ du dessinage du camembert
    	float angleTotal = 0;
    	// J'ai mis 2 angles pour pouvoir garder en mémoire l'angle du triangle que l'on va dessiner ensuite pour colorer la portion
     
     
    	// Initialisation du cercle
    	g.drawOval(150, 50, 200,200);
    	//le centre du cercle est en fait x+rayon et y+rayon car on dessine le cercle dans un carré que l'on place par rapport
    	//au coin en haut à gauche. On trace cette droite si on a au moins deux budgets 
    	if (nbBudgets > 1) g.drawLine(250, 150, 350, 150); 
    	g.drawString("Camembert des budgets", 50, 50);
     
     
    	//Montant total des budgets dans le vecteur
    	for (int i=0;i< nbBudgets;i++){
    		montantTotal += budget.retourneCategorie(i).getMontant();
    	}
    	// Calcul de la part de chaque budget par rapport au buget total
    	for (int i=0;i< nbBudgets;i++){
    		nomBudget=budget.retourneCategorie(i).getNom();
    		montantBudget=budget.retourneCategorie(i).getMontant();
    		angleBudget = (float) (360 * montantBudget / montantTotal);
    		angleTotal += angleBudget;
     
    	}
    }

    Donc j'ai bien l'angle de calculé, j'ai mon centre, ma droite de départ.... manque que :

    => Trouver le point sur le cercle avec surement des sinus et cosinus dont je n'ai plus le souvenir

    => Colorier ma portion

    Et ca sera fonctionnel

    SI quelqu'un a une méthode plus simple, je suis preneur. PS: jfreechart je n'ai pas "le droit" de l'utiliser ^^ (dommage)

    Merci à tous ceux qui ont eu le courage de lire mon post jusqu'au bout

  2. #2
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut


    Coordonnées de M (par rapport au centre (0,0)) -->(cos(a),sin(a));

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    merci pour le dessin


    J'ai passé l'aprem à faire des tests pour mettre camembert comme il faut, mais c'est du n'importe quoi. J'ai séparé 4 cas au début (0=>pi/2, pi/2=>pi..).
    Mais non, ca change rien :s


    donc j'en suis revenu à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		System.out.println("le budget " + i + " a un angleBudget de "+ angleBudget + " et un angleTotal de "+ angleTotal);
    		g.drawLine(250,150, Math.round( 250 + 100*(float)Math.cos(angleTotal)), Math.round(150 - 100 * (float)Math.sin(angleTotal)));
    avec angleTotal défini comme tout à l'heure.

    J'ai mis toutes les données de mon vecteur au même montant, et ca donne ca:




    Donc voila quoi... pas trop équitable comme part

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    ahhhhhhhhhhhhhhhhhhh!!!

    Il suffisait de convertir en radian!!! Je suis une nouille, pas compris que 30°, c'est pas un radian :s


    Bon, attaque de la colorisation de chaque part, là j'ai besoin de votre aide, j'ai pas la moindre idée de comment faire :o

    J'ai un tableau de 100 couleurs, et je veux affecter la tab_couleur[i] à la part i de mon camembert, mais je sais pas ensuite comment coloriser un triangle délimité par un arc de cercle :s


    Merci de votre aide

  5. #5
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut
    Tout d'abord, mettre le tag .

    Ensuite, poser ta nouvelle question dans un nouveau post.

    Merci.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Par défaut
    Ha ok, mon premier post je le décomposais déjà en deux parties, c'est pour ca

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

Discussions similaires

  1. Tracer Courbe lift à la main
    Par indox dans le forum SAS STAT
    Réponses: 0
    Dernier message: 03/08/2014, 14h26
  2. Aide appel de fonctions sur "main"
    Par smoxi dans le forum C
    Réponses: 24
    Dernier message: 03/05/2012, 22h38
  3. tracer une figure à la main
    Par wnxbcv dans le forum MATLAB
    Réponses: 9
    Dernier message: 27/08/2009, 14h18
  4. [Débutant] Tracer une courbe main levée
    Par L8O8L dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 01/05/2007, 19h26
  5. Aide pour la prise en main du Protocole MODBUS/JBUS
    Par homeostasie dans le forum MFC
    Réponses: 24
    Dernier message: 20/05/2006, 15h56

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