vectco.py

Created by dan-wallez

Created on December 20, 2024

5 KB

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

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.