none
Traçage d'une ligne entre deux cercle créés? RRS feed

  • Question

  • Bonsoir à tous,
    j'ai créé une interface qui contient 2 boutons:cercle et ligne quand je clique sur le bouton cercle et sur un endroit de la fenetre elle se créé une cercle , je voudrai savoir maintenant comment je peut faire pour tracer une ligne entre chaque deux cercles créés de telle façon que quand je clique sur le bouton ligne puis sur le cercle(ou' j'ai dejà fait le cliquement sur la fenetre pour le dessin de cercle) sans relacher la souris et je me déplace un trait se forme du point ou j'ai cliqué jusqu'au pointeur de ma souris (au niveau de la 2eme cercle) et quand je lache le bouton de la souris le trait est dessiner.
    Je besoin de votre aide svp!
    Merci d'avance.


    jeudi 18 mars 2010 19:35

Réponses

  • pour déterminer les coordonnées d' un point d' un  cercle , tu peux utiser l' équation cartésienne d' un cercle  la formule c' est :

     (x - a ) ² + ( y- b )² = r²     

      (a , b) coordonnées (Cx,Cy) du centre du cercle 

     r = rayon 

     x et y  coordonnées d' un point M apartenant au cercle,,x ou y doivent être compris entre -r et +r

    dailleur avec les équations cartésiennes tu pourras faire pas mal de chose vu l' orientation de t' on projet,faut être bon en math ;) ca me rappel des vieux souvenirs de mecanique générale perdu dans les abisses de mon cerveau, brrr ,c ca qu' en on pratique plus il y a tellement de formules...

    @++


    LENILAM
    • Marqué comme réponse Alex Petrescu mercredi 24 mars 2010 10:52
    samedi 20 mars 2010 12:27

Toutes les réponses

  • slt,

    bon comme ca a première vu pour les évenements et écoutes c le même principe que ton premier post donc pour les cercles ensuite vu que tu dois tracer une ligne entre t deux cercles soyon logique pour ce faire

    1 er : quand tracage du premier cercle récupération des coordonnées X1 et Y1 mouse ( centre du cercle)

    2eme : quand  tracage du 2eme cercle récupération coordonnée X2 et Y2mouse (centre cercle)

    3eme: calculer avec les paramètres X1,Y12, X1,Y2  le millieu de ces deux points (coordonnées X Y ).

    Et si la droite doit être perpendiculaire au segment X1Y1,X2Y2 alors il faut calculer les coordonnée (qui déterminerons l' angle ) de la droite. toujours en fonction de X1Y1 et X2Y2

    après faut faire un peu de maths,:)


    LENILAM
    vendredi 19 mars 2010 10:28
  • Slt,

    Comment je peut faire la récupération des cordonnées à la suite du traçage du cercle? avez vous une idée s'il existe une méthode qui s'occupe de ça?

    vendredi 19 mars 2010 12:54
  • Bonjour,

     

    peut-tu nous donner ton code sur le tracage des deux cercles ?

     


    fred
    vendredi 19 mars 2010 14:26
  • je suis pas le mieux placé pour vous  donner tout ce dont vous avez besoin mais pour les coordonnées d' un cercle tracé

    public partial class Form1 : Form
        {
    // variable tableau 1 dimension mais a 2 dimensions ce serait mieux pour stocker les pair de Int  et dynamic si vous devez tracer un nb X de cercle      

     int[] Coor = new int[1]; 

     

    void Form1_MouseClick(object sender, MouseEventArgs e)
            {
                this.MouseClick -= new MouseEventHandler(Form1_MouseClick);
                drawCircle(e.X, e.Y);

    //enregistrement des coordonnées dans la variable tableau

                  Coor.SetValue(e.X, 0);
                Coor.SetValue(e.Y, 1);

    //e.X et e.Y  sont vos coordonnées , les enregistrer  dans une variable   tableau

             }

    sachant qu' il faudra enregistrer les paramètres pour chaque cercle tracé  il faudra forcément soit vous servir d' une variable tableau dynamique (c possible ,le tableau s' agrandi au fur et à mesure )pour vous permettre d' enregistrer par paire les X et Y voir un tableau à deux dimensions et coder une incrémentation I par exemple de valeur qui servira de Paramètre d' Index pour enregistrer la pair de valeur dans le tableau en utilisant le paramètre I pour spécifier l' index.

    si c pour le tracé de la ligne faudrait que je potasse suis pas expert vraiment pas  j' imagine que la ligne doit être perpendiculaire a la droite passant par le centre de chaque cercles, pour ca jcrois qu' il faut utiliser equation vectoriel  pour définir les coordonnées mais c trop loing dans mes souvenir dsl :( mais je suis preneur si on me montre la solute.

    ptète qu' il y a un moyen biaiser pour y arriver j' essereais si g du tmps

    bon je stop ca donne pas la solute

               


    LENILAM
    vendredi 19 mars 2010 15:10
  • @ Fred 75 :

    Voilà c le code que j'ai déja fait pour le traçage des cercles:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace Project
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                NoeudButton.Click += new EventHandler(NoeudButton_Click);
            }

            private void NoeudButton_Click(object sender, EventArgs e)//object sender est l'objet déclencheur de l'évènement
            {
               
                this.MouseClick += new MouseEventHandler(Form1_MouseClick);
            }

            void Form1_MouseClick(object sender, MouseEventArgs e)
            {
                this.MouseClick -= new MouseEventHandler(Form1_MouseClick);
                drawCircle(e.X, e.Y);
               
            }

            private void drawCircle(int x, int y)
            {
                Graphics g;
                g = CreateGraphics();
                Rectangle myRectangle = new Rectangle(x, y, 40, 40);
                Pen myPen = new Pen(Color.Blue, 4);
                SolidBrush sb1 = new SolidBrush(Color.Aqua);
                g.FillEllipse(sb1, myRectangle);
                g.DrawEllipse(myPen, myRectangle);
                g.Dispose(); //libération de l'objet graphique
            }

          // private void LineButton_click(object sender, EventArgs e)

         //  {

           //}
        }
    }

     

        @Dragonix : Merci pour tous j'essaye encore...

    vendredi 19 mars 2010 15:28
  • Moi ce que je ferais

    //Déclaration d'un tableau a une dimension
      string[] TableauCoordonnees = new string[10];
      //Création d'un compteur de cercle
      int CompteurDeCercle = new int();
      //Les coordonnées de ton cercle à dessiner
      int X, Y = new int();


      private void Form1_Load(object sender, EventArgs e)
      {
        CompteurDeCercle = 0;
        //remplissage du tableau à chaque dessin
        CompteurDeCercle += 1;
        TableauCoordonnees[CompteurDeCercle] = X.ToString() + "-" + Y.ToString();

      }

     


    fred
    vendredi 19 mars 2010 17:53
  • re, question la ligne que tu veux tracer c'est celle qui passe par les centres du cercle ou c'est la médiatrice du segment formé par le centre des cercles ?
    LENILAM
    samedi 20 mars 2010 02:04
  • Bonjour, Vraiment merci à vous de votre écoute et de votre essai d'aide...

    une ligne simple qui passe par 2 points appartiennet au chaque cercle (oui, les centre par exemple) ou  au perimétre du chacune de ces derniers. j'ai pensé de la méthode DrawLine:   

                                 Graphics g;
                                g = CreateGraphics();

                               Pen myPen = new Pen(Color.Black, 4);

                               g.drawLine(myPen, startPoint, endPoint); // startPoint (x1,Y1) et endPoint (x2,Y2)

     

     mais cette méthode n'est pas compléte par rapport à mon programme j'ai pas encore trouvés comment je la relie   par rapport au événement faites pour le traçage de mes cercles car elle ne fait pas le traçage du ligne exactement entre n'importe qu'elle cercles déja créé et de la maniére que je désire  comme celui ci:

                                  public partial class Form1 : Form
                                 {
                                      public Form1( )
                                        {
                                          InitializeComponent( );
                                          this.DoubleBuffered = true;
                                         }

                                            private struct Line
                                          {
                                              public Point Start;
                                               public Point End;

                                               public Line( Point start, Point end )
                                             {
                                                this.Start = start;
                                                  this.End = end;
                                               }
                                          }

                                        private List< Line > lines = new List< Line >( );
                                         private Point start, end;
                                        private bool draw = false;

                                      protected override void OnMouseDown( MouseEventArgs e )
                                     {
                                        start = e.Location;
                                        draw = true;
                                        }

                                          protected override void OnMouseUp( MouseEventArgs e )
                                       {
                                           draw = false;
                                           lines.Add( new Line( start, end ) );
                                        }

                                         protected override void OnMouseMove( MouseEventArgs e )
                                      {
                                          if ( draw )
                                         {
                                              end = e.Location;
                                          this.Invalidate( this.ClientRectangle );
                                           }
                                         }

                                      protected override void OnPaint( PaintEventArgs e )
                                      {
                                         Graphics g = e.Graphics;

                                         foreach( Line line in lines )
                                        g.DrawLine( myPens.Black, line.Start, line.End );

                                         if ( draw )
                                        g.DrawLine( myPens.Black, start, end );   
                                      }
                                   }

    samedi 20 mars 2010 09:14
  • pour déterminer les coordonnées d' un point d' un  cercle , tu peux utiser l' équation cartésienne d' un cercle  la formule c' est :

     (x - a ) ² + ( y- b )² = r²     

      (a , b) coordonnées (Cx,Cy) du centre du cercle 

     r = rayon 

     x et y  coordonnées d' un point M apartenant au cercle,,x ou y doivent être compris entre -r et +r

    dailleur avec les équations cartésiennes tu pourras faire pas mal de chose vu l' orientation de t' on projet,faut être bon en math ;) ca me rappel des vieux souvenirs de mecanique générale perdu dans les abisses de mon cerveau, brrr ,c ca qu' en on pratique plus il y a tellement de formules...

    @++


    LENILAM
    • Marqué comme réponse Alex Petrescu mercredi 24 mars 2010 10:52
    samedi 20 mars 2010 12:27