/// <summary> /// Permet de dessiner le contour carré dans la matrice /// </summary> /// <param name="p_carré">Les coordonnées des deux coins opposés du carré</param> void DessinerCarré(Coordonnées p_carré) { double deltaX = p_carré.PosX2 - p_carré.PosX1; double deltaY = p_carré.PosY2 - p_carré.PosY1; for (int i = 0; i != deltaX;) { Matrice[p_carré.PosY1, p_carré.PosX1 + i] = CharRemplissage; Matrice[p_carré.PosY2, p_carré.PosX2 - i] = CharRemplissage; if (deltaX > 0) { ++i; } else { --i; } } for (int i = 0; i != deltaY;) { Matrice[p_carré.PosY1 + i, p_carré.PosX1] = CharRemplissage; Matrice[p_carré.PosY2 - i, p_carré.PosX2] = CharRemplissage; if (deltaY > 0) { ++i; } else { --i; } } Matrice[p_carré.PosY1, p_carré.PosX2] = CharRemplissage; Matrice[p_carré.PosY2, p_carré.PosX1] = CharRemplissage; }
/// <summary> /// Permet d'avoir les positions pour dessiner dans la matrices /// </summary> void AcquérirPosition(char p_choixUtilisateur) { if (p_choixUtilisateur == 'l') { Coordonnées ligne = new Coordonnées( LireInt32DansIntervalle("\nPosition en X du premier point : ", 1, NbColonnes), LireInt32DansIntervalle("Position en Y du premier point : ", 1, NbLignes), LireInt32DansIntervalle("Position en X du deuxième point : ", 1, NbColonnes), LireInt32DansIntervalle("Position en Y du deuxième point : ", 1, NbLignes)); DessinerLigne(ligne); } else { Coordonnées carré = new Coordonnées( LireInt32DansIntervalle("\nPosition en X du premier coin : ", 1, NbColonnes), LireInt32DansIntervalle("Position en Y du premier coin : ", 1, NbLignes), LireInt32DansIntervalle("Position en X du coin opposé au premier : ", 1, NbColonnes), LireInt32DansIntervalle("Position en Y du coin opposé au premier : ", 1, NbLignes)); DessinerCarré(carré); } }
/// <summary> /// Permet de dessiner une ligne dans la matrice /// </summary> /// <param name="p_ligne">Les coordonnées de la ligne dans la matrice</param> void DessinerLigne(Coordonnées p_ligne) { double deltaX = (p_ligne.PosX2 - p_ligne.PosX1); double deltaY = (p_ligne.PosY2 - p_ligne.PosY1); double m = 0; if (Abs(deltaX) == 0) { DessinerLigneVertical(deltaY, p_ligne.PosY1, p_ligne.PosX1); return; } m = deltaY / deltaX; double b = p_ligne.PosY1 - m * p_ligne.PosX1; double deltaUtilisé = (Abs(deltaX) >= Abs(deltaY) ? deltaX : deltaY); for (int i = 0; i != deltaUtilisé;) { if (deltaUtilisé == deltaX) { Matrice[ToInt32(Round(m * (p_ligne.PosX1 + i) + b)), p_ligne.PosX1 + i] = CharRemplissage; } else { Matrice[(p_ligne.PosY1 + i), ToInt32(Round((p_ligne.PosY1 + i - b) / m))] = CharRemplissage; } if (deltaUtilisé > 0) { ++i; } else { --i; } Matrice[p_ligne.PosY2, p_ligne.PosX2] = CharRemplissage; } }