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