MATH_SurfacePolygone    [Geometrie]

Par Antoine Galmiche (Math4D v1)
Nouvelle recherche
Si (Faux)
   ` MATH_SurfacePolygone [Antoine Galmiche 07/2002]
   ` ---------------------------------------------
   ` ATTENTION : ne fonctionne que pour les polygones convexes
   ` ---------------------------------------------
   ` Rappels mathématiques :
   ` Surface d'un triangle quelconque:
   ` Si p=(a+b+c)/2
   ` Surface=Ăp;(p-a);(p-b);(p-c)
   ` Le polygone est décomposé en triangles quelconques
   ` Tous les triangles ont un point commun
   ` ---------------------------------------------
   ` MATH_SurfacePolygone (->TableauAbscisses; ->TableauOrdonnées) -> Numérique
   ` TableauAbscisses (Pointeur) Pointeur tableau réel des abscisses
   ` TableauOrdonnées (Pointeur) Pointeur tableau réel des ordonnées
   ` Résultat (Numérique) Surface
   ` ---------------------------------------------
   ` MATHERROR
   ` 0 -> Pas d'erreur
   ` -1 -> Tableaux de tailles différentes
   ` -2 -> Tableaux contenant moins de 3 éléments
   ` ---------------------------------------------
   ` ATTENTION
   ` La méthode ne fonctionne que pour des polygones
   ` Elle ne fonctionne pas correctement avec les portions de courbes,
   ` en effet, si les points sont trop rapprochés,
   ` le dernier calcul retourne toujours 0;;;
   ` ---------------------------------------------
   ` EXEMPLES
   ` tab1: 2, 2, 6, 7  et  tab2: 2, 6, 2, 5
   ` MATH_SurfacePolygone (->tab1;->tab2) = 14
Fin de si 

C_ENTIER LONG(MATHERROR)
C_POINTEUR($1;$2)
C_REEL($0)
$0:=0
Au cas ou 
 : (Taille tableau($1->)#Taille tableau($2->))
 MATHERROR:=-1
 : (Taille tableau($1->)<3)
 MATHERROR:=-2
Sinon 
 MATHERROR:=0
Fin de cas 

Si (MATHERROR=0)
 C_REEL($X1;$Y1;$X2;$Y2;$X3;$Y3;$C12;$C23;$C31;$p)
 $X1:=$1->{1}  ` abscisse de ref
 $Y1:=$2->{1}  ` ordonnée de ref
 Boucle ($i;2;(Taille tableau($1->)-1))
  $X2:=$1->{$i}  ` abscisse du deuxième point
  $Y2:=$2->{$i}  ` ordonnée du deuxième point
  $X3:=$1->{($i+1)}  ` abscisse du troisième point
  $Y3:=$2->{($i+1)}  ` ordonnée du troisième point
  $C12:=Racine carree((($X2-$X1)^2)+(($Y2-$Y1)^2))  ` longueur coté 12
  $C23:=Racine carree((($X3-$X2)^2)+(($Y3-$Y2)^2))  ` longueur coté 23
  $C31:=Racine carree((($X3-$X1)^2)+(($Y3-$Y1)^2))  ` longueur coté 31
  $p:=($C12+$C23+$C31)/2
  $0:=$0+(Racine carree($p*($p-$C12)*($p-$C23)*($p-$C31)))
 Fin de boucle 
Fin de si