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 :

[fillOval]Tracer des cercles


Sujet :

2D Java

  1. #1
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut [fillOval]Tracer des cercles
    bonjour,
    dans le cadre d'un projet universitaire, j'ai besoin de tracer des cercles dans un grand cercle.

    Pour cela je creer des cercles, C0 est le grand cercle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Cercle(x,y,rayon);
    C0=(0,0,400);
    C1=(200,0,100);
    C2=(-100,10,100);
    je veux tracer le cercle CO au milieu de ma Jframe et que les autres cercles soit placés par rapport au centre de C0;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     paintComponent(Graphics g)
    {
         g.fillOval((int)(getWidth()/2)-C0.rayon),(int)(getHeight()/2)-C0.rayon),(int)C0.rayon,(int)C0.rayon);
     
          g.fillOval((int)(getWidth()/2)-C0.rayon)+C0.rayon+C1.X-C1.rayon,(int)getHeight()/2)-C0.rayon)+C0.rayon+C1.Y-C1.rayon,(int)C0.rayon,(int)C0.rayon);
     
       g.fillOval((int)(getWidth()/2)-C0.rayon)+C0.rayon+C2.X-C2.rayon,(int)getHeight()/2)-C0.rayon)+C0.rayon+C2.Y-C1.rayon,(int)C0.rayon,(int)C0.rayon);
     
    }
    le probleme c'est sur papier c'est tout a fait logique alors que sur une Jframe la placement et totalement abérant.

    je vous réexplique le soucis, j'ai un grand cercle C0 qui doit etre placer au milieu de la JFrame, ensuite par rapport au centre de C0 je trace les autres cercles

    Si qq1 sait d'ou vient ce probleme !!!!!

    merci

  2. #2
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510
    Par défaut
    Déjà, premier problème, le code est pour le moins obscur ! Je ne parviens pas à faire le lien entre tes explications de principe et le code lui même. Pourquoi, par exemple, enlèves-tu C0.rayon aux coordonnées du premier ? Tu veux un cercle décalé ?

    Puisque tu es un universitaire, pourrais-tu nous faire une belle translation de coordonnées dans le plan ? Sachant que le 0,0 du Graphics est le point en haut à gauche, quel décalage général voudrais-tu pour ta figure ?

    Nota : et aussi emploie la balise code, c'est tellement plus beau.

  3. #3
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    en fait je veux dessiner un cercle en plein milieu d'une Jframe.
    le centre de ce cercle sera interpreter comme (0,0) afin de tracer d'autres cercles.

    exemple un cerce ayant un x de 100 et un y de 200 devra etre placer dans le grand cercle a partir de son centre.

    regardez l'exemple joint.

    1) comment determiner ou commence a dessiner le grand cercle pour qu'il se retrouve au milieu de la Jframe et commencé tracer les autres cercles pour qu'il soit dessiner par rapport au centre de ce cercle ???

    Merci
    Images attachées Images attachées  

  4. #4
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510
    Par défaut
    Pour le premier cercle, j'ai l'impression que c'est bon à lire le code. Je suppose que c'est C0.

    Pour le second, que je suppose être C1, je m'étonne que sa hauteur et largeur soient celle de C0 ? C'est le même étonnement pour C2, d'ailleurs.

    Mais comme cela reste obscur... essaie de mieux organiser ton code avec des variables intermédiaires par exemple, qui te permettent surtout de donner un nom clair aux choses, d'utiliser le modèle du Renderer dont on parle quelques fois ici, ou aussi peut être la méthode translate de Graphics pour simplifier les expressions.

    Tiens nous au courant.

  5. #5
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    oui mais je dois tracer les autres cercles a partir du centre de C0, je dois donc prendre ces coordonnées.

    C'est vraiment tordu comme programmation.

  6. #6
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Tu t'es pas trompé en utilisant fillOval ? C'était pas plutôt drawOval que tu voulais utilisé ? Parce que là, tu dessines des disques, pas des cercles .

    Ca marche ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     paintComponent(Graphics g)
    {
       int xCentre = (int)(getWidth()/2) ;
       int yCentre = (int)(getHeight()/2) ;
       g.drawOval (xCentre-C0.rayon, yCentre-C0.rayon, (int)C0.rayon, (int)C0.rayon);
       g.drawOval (xCentre+C1.X-C1.rayon, yCentre+C1.Y-C1.rayon, (int)C1.rayon, (int)C1.rayon);
       g.drawOval (xCentre+C2.X-C2.rayon, yCentre+C2.Y-C2.rayon, (int)C2.rayon, (int)C2.rayon);
    }

  7. #7
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    drawoval ou filloval peu importe !!

    j'ai suivi la meme logique que toi, qui selon moi est la seul logique mais sa dessine des cercles abérants.
    Aucune logique, j'y comprend rien du tout

  8. #8
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    non, ils ne sont pas aberants, il faut juste s'habituer au référentiel de la JFrame, et de lire la doc java qui dit:
    Citation Envoyé par javadoc
    Draws the outline of an oval. The result is a circle or ellipse that fits within the rectangle specified by the x, y, width, and height arguments. The oval covers an area that is width + 1 pixels wide and height + 1 pixels tall.

    Parameters:
    • x - the x coordinate of the upper left corner of the oval to be drawn.
    • y - the y coordinate of the upper left corner of the oval to be drawn.
    • width - the width of the oval to be drawn.
    • height - the height of the oval to be drawn.
    Donc x et y ne correspondent pas du tout au centre du cercle

    Ensuite à toi de réfléchir et de ressortir les cours de géométrie pour pouvoir placer tes cercles suivant

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 851
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 851
    Points : 22 863
    Points
    22 863
    Billets dans le blog
    51
    Par défaut
    Soit tu prends l'habitude de manipuler tes cercles depuis leur coin superieur gauche comme tout le monde ; soit tu utilises des Ellipse2D et tu fais un myEllipse.setFrameFromCenter(centerX, centerY, centerX+radiusX, centerY+radiusY).

  10. #10
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par sinok
    Donc x et y ne correspondent pas du tout au centre du cercle
    Ca je le savais, c'est pour ça que j'ai mis "xCentre-C0.rayon, yCentre-C0.rayon".

    J'ai ptetre trouvé le problème, ça vient du fait qu'il faut préciser la largeur et hauteur du rectangle contenant le cercle... donc il faut mettre rayon*2, pour faire le diamètre .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     paintComponent(Graphics g)
    {
       int xCentre = (int)(getWidth()/2) ;
       int yCentre = (int)(getHeight()/2) ;
       g.drawOval (xCentre-C0.rayon, yCentre-C0.rayon, (int)C0.rayon*2, (int)C0.rayon*2);
       g.drawOval (xCentre+C1.X-C1.rayon, yCentre+C1.Y-C1.rayon, (int)C1.rayon*2, (int)C1.rayon*2);
       g.drawOval (xCentre+C2.X-C2.rayon, yCentre+C2.Y-C2.rayon, (int)C2.rayon*2, (int)C2.rayon*2);
    }
    Avec ça j'obtiens ça :
    Images attachées Images attachées  

  11. #11
    Membre régulier Avatar de Fredo02
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    c bon j'ai aussi trouvé la soluce ! a noté que j'ai lu le referentiel sur la JFrame et qui si tu auré prit la peine de lire mon code tu auré vu que j'avais commencé a tracer mes cercles du point haut gauche.

    merci d'aoir cherché avec moi spekal !

  12. #12
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Alors oublie pas

Discussions similaires

  1. Imfindcircle - tracer des cercles
    Par Novae dans le forum Images
    Réponses: 6
    Dernier message: 16/10/2013, 13h21
  2. Tracer des cercles avec Tkinter
    Par XSquallX dans le forum Général Python
    Réponses: 4
    Dernier message: 07/04/2010, 15h34
  3. Tracer des lignes ,arcs de cercle et cercle
    Par lostchina dans le forum C++Builder
    Réponses: 16
    Dernier message: 12/06/2007, 06h59
  4. Réponses: 3
    Dernier message: 15/04/2004, 08h44
  5. [VB6] [Graphisme] Tracer un cercle avec pset
    Par bleuerouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/12/2002, 17h12

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