/// <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]); } }
/// <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); }
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); }
public bool IsEqual(Arete a) { return((S1.IsEqual(a.S1) && S2.IsEqual(a.S2)) || (S2.IsEqual(a.S1) && S1.IsEqual(a.S2))); }