MATH_SurfaceGraphe    [Geometrie]

Par Antoine Galmiche, Marc Duc-Jacquet (Math4D v1)
Nouvelle recherche
Si (Faux)
   ` MATH_SurfaceGraphe [Antoine Galmiche 07/2002, Marc Duc-Jacquet 10/2002]
   ` ---------------------------------------------
   ` Rappels mathématiques :
   ` Aire algébrique située entre l'axe Ox et une fonction linéaire par morceaux:
   ` Soient a=X1 TableauOrdonnées; ->Tableau2 ) -> Numérique
   ` sélecteur (entier long) 1=Tableau2 contient les abscisses
   `                                    2=Tableau2 contient 2 lignes : Origine et Pa
   ` ou constantes Graphe_Abscisses et Graphe_Origine
   ` TableauOrdonnées (Pointeur) Pointeur tableau réel des ordonnées
   ` Tableau2 (Pointeur) Pointeur tableau réel , abscisses ou origine/pas
   ` Résultat (Numérique) Surface de l'axe OX à la courbe
   ` ---------------------------------------------
   ` MATHERROR
   ` 0 -> Pas d'erreur
   ` -1 -> Tableaux de tailles différentes ou taille<2
   ` -2 -> Les abscisses ne sont pas distinctes ou bien ne sont pas croissantes
   ` -3 -> Pas inférieur ou égal à 0
   ` -4 -> Sélecteur non valable
   ` -5 -> Tableau Origine/Pas non conforme
   ` ---------------------------------------------
   ` 
Fin de si 

C_ENTIER LONG(MATHERROR)
C_ENTIER LONG($1)
C_POINTEUR($2;$3)
C_REEL($0)
$0:=0
MATHERROR:=0
C_REEL($n;$origine;$pas;$Y1;$X2;$Y2)
C_ENTIER LONG($i)

  ` Traitement des erreurs
Au cas ou 
 : ($1=1)  ` Abscisses
 $n:=Taille tableau($2->)
 Si ($n#Taille tableau($3->))  `test tableaux de même taille
  MATHERROR:=-1
 Sinon 
  Si ($n<2)  `test tableaux de taille<2
   MATHERROR:=-1
  Sinon 
   Boucle ($i;2;$n)  `test abscisses croissantes
    Si (($3->{$i})>($3->{$i-1}))
    Sinon 
     MATHERROR:=-2
     $i:=$n
    Fin de si 
   Fin de boucle 
  Fin de si 
 Fin de si 
 : ($1=2)  ` Origine et pas
 Si (Taille tableau($3->)#2)
  MATHERROR:=-5
 Sinon 
  $origine:=$3->{1}
  $pas:=$3->{2}
  Si ($pas<=0)
   MATHERROR:=-3
  Fin de si 
 Fin de si 
Sinon 
 MATHERROR:=-4  ` mauvais sélecteur    
Fin de cas 

  ` Algorithme
Si (MATHERROR=0)
 
 Si ($1=1)
  
  $0:=($3->{2}-$3->{1})/2*$2->{1}  `terme (X2-X1)/2*Y1
  Boucle ($i;2;$n-1)
   $0:=$0+(($3->{$i+1}-$3->{$i-1})/2*$2->{$i})  `terme (Xi+1-Xi-1)/2* Yi
  Fin de boucle 
  $0:=$0+(($3->{$n}-$3->{$n-1})/2*$2->{$n})  `terme (XN-XN-1)*YN/2
  
 Sinon 
  
  Boucle ($i;1;(Taille tableau($2->)-1))
   $Y1:=$2->{$i}  ` ordonnée du 1ier point
   $X2:=$origine+$pas  ` abscisse 2eme point
   $Y2:=$2->{$i+1}  ` ordonnée 2eme point
   Si ($Y1<$Y2)
    $0:=$0+($Y1*Abs($X2-$origine))+Abs(($X2-$origine)*($Y2-$Y1)/2)  ` surface rectangle axe + surface triangle tête
   Sinon 
    $0:=$0+($Y2*Abs($X2-$origine))+Abs(($X2-$origine)*($Y2-$Y1)/2)
   Fin de si 
   $origine:=$X2
  Fin de boucle 
 Fin de si 
 
Fin de si