Example #1
0
        /// <summary>
        /// Génère le Graphe de Gabriel d'après le nuage de points Sommets
        /// </summary>
        public void ConnecteSommets(bool auto)
        {
            if (auto)
            {
                int n = Sommets.Count;
                for (int i = 0; i < n; i++)
                {
                    Sommet s1 = Sommets[i];
                    for (int j = i + 1; j < n; j++) //Parcours "en triangle"
                    {
                        Sommet s2 = Sommets[j];
                        if (DoiventEtreRelies(s1, s2)) //Si les deux sommets doivent être reliés
                        {
                            Arete a = new Arete(s1, s2);
                            Aretes.Add(a);
                            s1.Incidences.Add(a);
                            s2.Incidences.Add(a);
                        }
                    }
                }
            }
            else
            {
                Aretes.Add(new Arete(Sommets[0], Sommets[1]));
                Aretes.Add(new Arete(Sommets[0], Sommets[2]));
                Aretes.Add(new Arete(Sommets[0], Sommets[3]));
                Aretes.Add(new Arete(Sommets[3], Sommets[5]));
                Aretes.Add(new Arete(Sommets[2], Sommets[4]));
                Aretes.Add(new Arete(Sommets[4], Sommets[5]));
                Aretes.Add(new Arete(Sommets[4], Sommets[6]));
                Aretes.Add(new Arete(Sommets[5], Sommets[6]));
                Aretes.Add(new Arete(Sommets[6], Sommets[7]));

                Sommets[0].Incidences.Add(Aretes[0]);
                Sommets[0].Incidences.Add(Aretes[1]);
                Sommets[0].Incidences.Add(Aretes[2]);
                Sommets[1].Incidences.Add(Aretes[0]);
                Sommets[2].Incidences.Add(Aretes[1]);
                Sommets[3].Incidences.Add(Aretes[2]);

                Sommets[3].Incidences.Add(Aretes[3]);
                Sommets[5].Incidences.Add(Aretes[3]);

                Sommets[2].Incidences.Add(Aretes[4]);
                Sommets[4].Incidences.Add(Aretes[4]);

                Sommets[4].Incidences.Add(Aretes[5]);
                Sommets[5].Incidences.Add(Aretes[5]);

                Sommets[4].Incidences.Add(Aretes[6]);
                Sommets[6].Incidences.Add(Aretes[6]);

                Sommets[5].Incidences.Add(Aretes[7]);
                Sommets[6].Incidences.Add(Aretes[7]);

                Sommets[6].Incidences.Add(Aretes[8]);
                Sommets[7].Incidences.Add(Aretes[8]);
            }
        }
Example #2
0
        /// <summary>
        /// Crée une copie de liste en cassant la référence à la liste d'origine
        /// </summary>
        /// <param name="liste"></param>
        /// <returns></returns>
        public List <Arete> DeepCopy(List <Arete> liste)
        {
            Arete[] tab = new Arete[liste.Count];
            liste.CopyTo(tab);
            List <Arete> copieListe = new List <Arete>(tab);

            return(copieListe);
        }
Example #3
0
        private void TraceArete(Arete r)
        {
            Pen aPen = new Pen(Color.Black, 1);

            // Set line caps and dash style:
            aPen.StartCap   = LineCap.RoundAnchor;
            aPen.EndCap     = LineCap.RoundAnchor;
            aPen.DashStyle  = DashStyle.Dash;
            aPen.DashOffset = 500;
            PointF ptf1 = r.S1.Pt;
            PointF ptf2 = r.S2.Pt;

            dessin.DrawLine(aPen, ptf1, ptf2);
            aPen.Dispose();
            Font   f      = new Font("Calibri", 11, FontStyle.Regular);
            PointF milieu = r.S1.CalculeMilieu(r.S2).Pt;

            dessin.DrawString(r.ToString(), f, Brushes.Black, milieu);
        }
Example #4
0
 public bool IsEqual(Arete a)
 {
     return((S1.IsEqual(a.S1) && S2.IsEqual(a.S2)) || (S2.IsEqual(a.S1) && S1.IsEqual(a.S2)));
 }