Calculer l'aire d'un triangle ABC en C

Résolu/Fermé
973HLM - Modifié par Chris 94 le 31/05/2013 à 01:23
nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 - 12 juin 2013 à 18:34
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 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
31 mai 2013 à 15:15
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 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 31/05/2013 à 17:06
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 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 64
12 juin 2013 à 18:34
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