Vecteurs colinéarité et ou coplanarité , relations éventuelles entre 3 vecteurs. Attention les coordonnées des vecteurs sont à entrer sous forme de fraction. Utiliser la police petit (paramètrage calculatrice)
class Fraction: def __init__(self,x,y): self.numerator=int(x) self.denominator=int(y) def __add__(self,fract2): return Fraction(self.numerator*fract2.denominator + self.denominator*fract2.numerator , self.denominator*fract2.denominator).simplify() def fmult(self,fract): return Fraction(self.numerator*fract.numerator , self.denominator*fract.denominator).simplify() def __sub__(self,fract2): return Fraction(self.numerator*fract2.denominator - self.denominator*fract2.numerator , self.denominator*fract2.denominator).simplify() def fdiv(self,fract): return Fraction(self.numerator*fract.denominator , self.denominator*fract.numerator).simplify() def fstring(self): self=self.simplify() if self.denominator==1 : return "{}".format(self.numerator) else : return "{}/{}".format(self.numerator,self.denominator) def simplify(self): divc = pgcd(self.numerator,self.denominator) a=self.numerator // divc b=self.denominator // divc return Fraction(a,b) def trouve(xU,yU,zU,xV,yV,zV,xW,yW,zW): div = xU.fmult(yV) - yU.fmult(xV) if div.numerator != 0 : a = (xW.fmult(yV) - yW.fmult(xV)).fdiv(div) b = (xU.fmult(yW) - yU.fmult(xW)).fdiv(div) else : div = yU.fmult(zV) - zU.fmult(yV) if div.numerator != 0 : a = (yW.fmult(zV) - zW.fmult(yV)).fdiv(div) b = (yU.fmult(zW) - zU.fmult(yW)).fdiv(div) else : div = xU.fmult(zV) - zU.fmult(xV) a = (xW.fmult(zV) - zW.fmult(xV)).fdiv(div) b = (xU.fmult(zW) - zU.fmult(xW)).fdiv(div) return (a,b) def pgcd(a,b): if b == 0: return a else : r = a%b return pgcd(b,r) def coordonnee(coord,n): num = int(input("\nNumérateur de " + coord + n + " = ")) den = int(input( "Dénominateur de " + coord + n + " = ")) return(Fraction(num,den)) def saisie(nom): x = coordonnee("x",nom) y = coordonnee("y",nom) z = coordonnee("z",nom) return(x,y,z) def imprim_colin (xVECT1,yVECT1,zVECT1,xVECT2,yVECT2,zVECT2,nom1,nom2): if xVECT1.numerator != 0 : DIV = xVECT2.fdiv(xVECT1) elif yVECT1.numerator != 0 : DIV = yVECT2.fdiv(yVECT1) else : DIV = zVECT2.fdiv(zVECT1) print(nom2 + " = " + DIV.fstring() + " * " + nom1) #### PROGRAMME PRINCIPAL #### print("\nIMPORTANT POUR LA SAISIE") print("Coordonnées sous forme de fraction :") print("Numérateur entier relatif") print("Dénominateur entier relatif non nul\n") choix = 0 while choix == 0 : print("Vecteurs : colinéarité et coplanarité") print("Relations éventuelles entre 3 vecteurs") print("\nSaisie du vecteur U(xU;yU;zU)") xU, yU, zU = saisie("U") print("\nSaisie du vecteur V(xV;yV;zV)") xV, yV, zV = saisie("V") print("\nSaisie du vecteur W(xW;yW;zW)") xW, yW, zW = saisie("W") print("\nU("+xU.fstring()+";"+yU.fstring()+";"+zU.fstring()+"), V("+xV.fstring()+";"+yV.fstring()+";"+zV.fstring()+"), W("+xW.fstring()+";"+yW.fstring()+";"+zW.fstring()+")") unul = xU.numerator==0 and yU.numerator==0 and zU.numerator==0 vnul = xV.numerator==0 and yV.numerator==0 and zV.numerator==0 wnul = xW.numerator==0 and yW.numerator==0 and zW.numerator==0 if (xU.fmult(yV.fmult(zW)) + yU.fmult(zV.fmult(xW)) + zU.fmult(xV.fmult(yW)) - zU.fmult(yV.fmult(xW)) - xU.fmult(zV.fmult(yW)) - yU.fmult(xV.fmult(zW))).numerator == 0 : print ("\nVecteurs coplanaires") colineaire = False if (yU.fmult(zV)-zU.fmult(yV)).numerator==0 and (zU.fmult(xV)-xU.fmult(zV)).numerator==0 and (xU.fmult(yV)-yU.fmult(xV)).numerator==0 : colineaire = True print("\nVecteurs U et V colinéaires :") if unul : print ("U nul ou encore U = 0 * V") if vnul : print ("V nul ou encore V = 0 * U") if not unul and not vnul : imprim_colin(xU,yU,zU,xV,yV,zV,"U","V") if (yU.fmult(zW)-zU.fmult(yW)).numerator==0 and (zU.fmult(xW)-xU.fmult(zW)).numerator==0 and (xU.fmult(yW)-yU.fmult(xW)).numerator==0 : colineaire = True print("\nVecteurs U et W colinéaires :") if unul : print ("U nul ou encore U = 0 * W") if wnul : print ("W nul ou encore W = 0 * U") if not unul and not wnul : imprim_colin(xU,yU,zU,xW,yW,zW,"U","W") if (yV.fmult(zW)-zV.fmult(yW)).numerator==0 and (zV.fmult(xW)-xV.fmult(zW)).numerator==0 and (xV.fmult(yW)-yV.fmult(xW)).numerator==0 : colineaire = True print("\nVecteurs V et W colinéaires :") if vnul : print ("V nul ou encore V = 0 * W") if wnul : print ("W nul ou encore W = 0 * V") if not vnul and not wnul : imprim_colin(xV,yV,zV,xW,yW,zW,"V","W") if not colineaire : print ("\nAucune colinéarité entre les vecteurs") print ("mais ces 3 vecteurs sont coplanaires") print ("On détermine W fonction de U et de V") alpha,beta = trouve(xU,yU,zU,xV,yV,zV,xW,yW,zW) print ("\nW = " + alpha.fstring() + " * U + " + beta.fstring() + " * V") else : print ("\nVecteurs non coplanaires") print("\nSaisir chiffre 0 pour recommencer") choix = int(input("Autre chiffre pour quitter : ")) print("\nAu revoir") # Type your text here