/// <summary> /// Teste si deux formes sont trop proches pour envisager le passage du robot /// </summary> /// <param name="forme1">Forme 1</param> /// <param name="forme2">Forme 2</param> /// <returns>Vrai si les deux formes sont trop proches</returns> public bool TropProche(IForme forme1, IForme forme2, int marge = 0) { Type typeForme1 = forme1.GetType(); Type typeForme2 = forme2.GetType(); if (typeForme1.IsAssignableFrom(typeof(Segment))) if (typeForme2.IsAssignableFrom(typeof(Segment))) return ((Segment)forme1).Distance((Segment)forme2) < Rayon; else return ((Segment)forme1).Distance(forme2) < Rayon; else return forme1.Distance(forme2) < Rayon + marge; }
public static void DessinerForme(Graphics graphics, Color color, int epaisseur, IForme inconnue, bool plein = false) { Type typeForme = inconnue.GetType(); if (typeForme.IsAssignableFrom(typeof(Droite))) DessinerForme(graphics, color, epaisseur, (Droite)inconnue); else if (typeForme.IsAssignableFrom(typeof(Segment))) DessinerForme(graphics, color, epaisseur, (Segment)inconnue); else if (typeForme.IsAssignableFrom(typeof(Cercle))) DessinerForme(graphics, color, epaisseur, (Cercle)inconnue, plein); else if (typeForme.IsAssignableFrom(typeof(Polygone)) || typeForme.IsSubclassOf(typeof(Polygone))) DessinerForme(graphics, color, epaisseur, (Polygone)inconnue); else throw new NotImplementedException("Je ne sais pas dessiner cette forme : " + inconnue.GetType().ToString()); }