Recherche de l'équation cartésienne d'un plan à partir des coordonnées de 3 points de l'espace

Soyez le premier à donner votre avis sur cette source.

Vue 18 830 fois - Téléchargée 274 fois

Description

Recherche l'équation cartésienne d'un plan à partir des coordonnées de 3 points de l'espace.

Source / Exemple :


#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{

double xA=0,yA=0,zA=0,xB=0,yB=0,zB=0,xC=0,yC=0,zC=0,xAb=0,yAb=0,zAb=0,xAc=0,yAc=0,zAc=0,mineurUne=0,mineurDeux=0,mineurTrois=0,termeIndependant=0,verification=0;

printf("##EQUATION CARTESIENNE D'UN PLAN A PARTIR DE TROIS POINTS##  Par Yvan\n\n\n");

printf("Entrez les coordonnees du point A\n");
printf("Xa :\n");
scanf("%lf",&xA);
printf("Ya :\n");
scanf("%lf",&yA);
printf("Za :\n");
scanf("%lf",&zA);

printf("Entrez les coordonnees du point B\n");
printf("Xb :\n");
scanf("%lf",&xB);
printf("Yb :\n");
scanf("%lf",&yB);
printf("Zb :\n");
scanf("%lf",&zB);

printf("Entrez les coordonnees du point C\n");
printf("Xc :\n");
scanf("%lf",&xC);
printf("Yc :\n");
scanf("%lf",&yC);
printf("Zc :\n");
scanf("%lf",&zC);

printf("AX= Lambda*AB+Mu*AC\n\n");//Formule générale

printf("AX=(X-%lf);(Y-%lf);(Z-%lf)\n",xA,yA,zA);
printf("AB=((%lf-%lf);(%lf-%lf);((%lf-%lf))\n",xB,xA,yB,yA,zB,zA);
printf("AC=((%lf-%lf);(%lf-%lf);((%lf-%lf))\n\n",xC,xA,yC,yA,zC,zA);

xAb=xB-xA;
yAb=yB-yA;
zAb=zB-zA;

xAc=xC-xA;
yAc=yC-yA;
zAc=zC-zA;

printf("AB=(%lf;%lf;%lf)\n",xAb,yAb,zAb);
printf("AC=(%lf;%lf;%lf)\n\n",xAc,yAc,zAc);

//Je cherche les mineurs car je résous matriciellement cette équation
mineurUne=(yAb*zAc)-(zAb*yAc);
mineurDeux=(-1)*((xAb*zAc)-(zAb*xAc));
mineurTrois=(xAb*yAc)-(yAb*xAc);
termeIndependant=((-1*xA*mineurUne)+(-1*yA*mineurDeux)+(-1*zA*mineurTrois));

printf("L'equation cartesienne est \n\n %lf X + %lf Y + %lf Z + %lf\n\n",mineurUne,mineurDeux,mineurTrois,termeIndependant);
verification=(xA*mineurUne+yA*mineurDeux+zA*mineurTrois+termeIndependant+xB*mineurUne+yB*mineurDeux+zB*mineurTrois+termeIndependant+xC*mineurUne+yC*mineurDeux+zC*mineurTrois+termeIndependant);
printf("Verification : On injecte les coordonnees de A,B et C dans l'equation cartesienne, ce qui nous donne %lf (Si cette valeur vaut zero, alors c'est correct)\n\n",verification);

system("PAUSE");
return 0;
}

Conclusion :


Merci beaucoup à mon institutrice de mathématique ! Sans elle, je ne serais pas trouver les équations cartésiennes d'un plan !

Codes Sources

A voir également

Ajouter un commentaire Commentaires
nicolasdemin
Messages postés
1
Date d'inscription
lundi 3 juillet 2006
Statut
Membre
Dernière intervention
12 mars 2007

12 mars 2007 à 17:27
Si je peut me permettre :

typedef struct{
int x;
int y;
int z;
} vecteur;

typedef struct{
int x;
int y;
int z;
} point;
C'est un peu redondant tout ca non?
vinc1008881
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
3
26 juil. 2006 à 17:57
sinon il y a plus simple

calcul des coordonées du vecteur AB et du vecteur AC
calcul du produit vectoriel AB^AC =
|a
|b
|c

d'ou P: ax + by + cz + d = 0, d s'obtient en résolvant une equation à une inconnu (faut se servir des coord de A)

ça nous donne : en C !!

int main (){
typedef struct{
int x;
int y;
int z;
} vecteur;

typedef struct{
int x;
int y;
int z;
} point;

point A, B, C;
vecteur AB, AC;
int a, b, c, d;

/*avec scanf on entre les coordonées de points dans A B C */

AB.x = B.x - A.x;
AB.y = B.y - A.y;
AB.z = B.z - A.z;

AC.x = C.x - A.x;
AC.y = C.y - A.y;
AC.z = C.z - A.z;

a = AB.y*AC.z - AB.z*AC.y;
b = -AB.x*AC.z + AB.z*AC.x;/*attention au signe*/
c = AB.x*AC.y - AB.y*AC.x;
d = -a*A.x - b*A.y - c*A.z;/*on résoud*/

printf...
return 0;
}
WiKonSoN
Messages postés
9
Date d'inscription
samedi 27 mai 2006
Statut
Membre
Dernière intervention
26 juin 2007

24 juin 2006 à 20:05
salut vecchio
c'est dans la norme ANSI/ISO
par exemple je fais;

int i;//i est initialise a zero et quand je ferais int i=0; globalement c'est inutile
main () { // quand la fonction est de type int on peut laisse le int
int age;//age a une valeur aleatoire
cout<<"entre votre age\n";
if(!i) // si i est 0 ce qui est est tjrs vrai
cin>>age; // donc il entrera toujours son age
i=1;
return 0;
}
bon ca marche
et quand bien meme en prog de jeux ca marche ie je declare x et y globalement
et j'affiche l"image a x et y c'est tjrs tous en haut a partir de 0,0
et selon moi il ne pers rien en declarant (certains) variables globalement
a++
BruNews
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
17 juin 2006 à 23:24
C'est tres clairement du nimporte quoi.
La justification de variables globales est de ne pas avoir à empiler, dépiler les parms, la (les) fonction qui s'en servira aura des adresses connues à la compil au lieu d'offset sur esp, tout ceci pour dire que ça peut se justifier dans une recherche de vitesse maxi mais pas autrement.
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
12
17 juin 2006 à 20:23
Déclarer les variables globales pour éviter de les initialiser à zéro, c'est la première fois que j'entends ca, et je pense que c'est une énormité
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.