# Pour simplifier les tests d'égalité, on se place dans
# le cas où tous les sommets ont des coordonnées entières.
def vecteur(xA,yA,xB,yB) :
""" Renvoie le couple de coordonnées du vecteur AB."""
return (xB-xA, yB-yA)
def carre_longueur(xA, yA, xB, yB):
""" Renvoie le carré de la longueur AB.
On retourne le carré pour éviter les pb d'arrondis avec la racine.
"""
xAB, yAB = vecteur(xA, yA, xB, yB)
return xAB*xAB + yAB*yAB
def est_parallelogramme(xA, yA, xB, yB, xC, yC, xD, yD):
""" Renvoie True si ABCD est plg, False sinon."""
return vecteur(xA,yA, xB,yB) == vecteur(xD,yD, xC, yC)
def sont_alignes(xA, yA, xB, yB, xC, yC):
""" Renvoie True si les trois points A, B, C sont alignés, False sinon."""
xAB, yAB = vecteur(xA, yA, xB, yB)
xAC, yAC = vecteur(xA, yA, xC, yC)
return xAB * yAC == yAB * xAC
def est_parallelogramme_nonaplati(xA, yA, xB, yB, xC, yC, xD, yD):
""" Renvoie True si ABCD est un parallélogramme non aplati, False sinon."""
plg = est_parallelogramme(xA, yA, xB, yB, xC, yC, xD, yD)
alignement = sont_alignes(xA, yA, xB, yB, xC, yC)
return plg and not(alignement)
def ont_meme_longueur(xA, yA, xB, yB, xC, yC, xD, yD):
""" Renvoie True si les segments AB et CD ont même longueur."""
return carre_longueur(xA, yA, xB, yB) == carre_longueur(xC, yC, xD, yD)
def est_losange(xA, yA, xB, yB, xC, yC, xD, yD):
""" Renvoie True si ABCD est un losange, False sinon."""
return est_parallelogramme_nonaplati(xA, yA, xB, yB, xC, yC, xD, yD) and ont_meme_longueur(xA, yA, xB, yB, xB, yB, xC, yC)
def est_carre(xA, yA, xB, yB, xC, yC, xD, yD):
""" Renvoie True si ABCD est un carré, False sinon."""
return est_losange(xA, yA, xB, yB, xC, yC, xD, yD) and ont_meme_longueur(xA, yA, xC, yC, xB, yB, xD, yD)
def est_rectangle(xA, yA, xB, yB, xC, yC, xD, yD):
""" Renvoie True si ABCD est un rectangle, False sinon."""
return est_parallelogramme_nonaplati(xA, yA, xB, yB, xC, yC, xD, yD) and ont_meme_longueur(xA, yA, xC, yC, xB, yB, xD, yD)
print(" A(0;0), B(1;0), C(1;1), D(0;1)")
xA, yA = 0, 0
xB, yB = 1, 0
xC, yC = 1, 1
xD, yD = 0, 1
print("Parallélogramme ? ", est_parallelogramme(xA, yA, xB, yB, xC, yC, xD, yD))
print("Alignés ?", sont_alignes(xA, yA, xB, yB, xC, yC))
print("Parallélogramme non aplati ? ", est_parallelogramme_nonaplati(xA, yA, xB, yB, xC, yC, xD, yD))
print("Losange ? ", est_losange(xA, yA, xB, yB, xC, yC, xD, yD))
print("Carré ? ", est_carre(xA, yA, xB, yB, xC, yC, xD, yD))
print("Rectangle ? ", est_rectangle(xA, yA, xB, yB, xC, yC, xD, yD))