Calculer l'aire d'un triangle ABC en C

Résolu
973HLM -  
nar6du14 Messages postés 506 Statut Membre -
Bonjour,
j'aimerais calculer l'air d'un triangle ABC quelconque a l'aide d'une fonction aire.
j'ai au préalable une structure point et une structure triangle.

voila ce que je fais:

    float surface (point A, point B, point C) {
    float aire;

return aire= 0.5 *((B.x)-(A.x))((C.y)-(A.y)) - ((C.x)-(A.x))((B.y)-(A.y));

    }

ça ne fonctionne pas... aidez moi s'il vous plait :)

3 réponses

totodunet Messages postés 1513 Statut Membre 201
 
je ne connais pas le C mais ça doit être la dernière ligne qui pose problème car tu luit dit de retourner aire avant même lui avoir assigné le résultat. essaie ça plutôt :

float surface(point A, point B, point C) {
return 0.5 *((B.x)-(A.x))((C.y)-(A.y)) - ((C.x)-(A.x))((B.y)-(A.y));
}


ça te fait économiser une variable

0
[Dal] Messages postés 6373 Statut Contributeur 1 106
 
Salut 973HLM,

Je pense que ceci marche mieux :

float surface(point A, point B, point C)
{
    return 0.5 * fabs( ((B.x - A.x) * (C.y - A.y)) -
                       ((C.x - A.x) * (B.y - A.y)) );
}

- en C, l'opérateur de multiplication est *, il faut le mentionner explicitement, la juxtaposition de parenthèses n'étant pas comprise comme un produit

- mettre des parenthèses autour de (B.x) est inutile

- en revanche, en mettre pour distinguer ce qui doit être multiplié de ce qui doit être soustrait est mieux

- ta formule omet le calcul de la valeur absolue, qui d'après https://fr.wikipedia.org/wiki/Aire_d%27un_triangle#.C3.80_partir_des_coordonn.C3.A9es_des_sommets doit être faite avant multiplication par 1/2

Sous toutes réserves, car mes souvenirs de géométrie remontent un peu :-)


Dal

Edit : fabs est à utiliser, présent dans math.h (et non abs, qui fonctionne avec des entiers : http://www.cplusplus.com/reference/cmath/fabs/)
0
nar6du14 Messages postés 506 Statut Membre 64
 
hum fais le calcul mathématiquement avant puis transcrit le en code et ça va fonctionner et regarde bien comment tu agences les parenthèses dans ton code.

le 0.5 multiplie t'il tout le reste ou bien uniquement ((B.x)-(A.x))((C.y)-(A.y));

s'il multiplie tout, mets une parenthèse ouvrante juste avant le "*" qui est après "0.5" et fermante juste avant le ";" qui marque la fin de l'instruction
0