cyber_N
Messages postés4Date d'inscriptionlundi 20 décembre 2004StatutMembreDernière intervention14 janvier 2005 4 nov. 2007 à 19:11
Merci, à vous deux & merci à Kirua,
tu as répondu à ma question (passer par des vecteurs).
Bonne continuation à vous,
Sébastien.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 4 nov. 2007 à 13:54
En 3D et en cartésien, on représente les droites comme des intersections de plans. En règle générale, dans un espace euclidien, on définit une droite ou un plan (ou un hyperplan, mais soit) comme un ensemble de points satisfaisant une contrainte linéaire:
ax + by + c = 0 -> droite en 2D
ax + by + cz + d = 0 -> plan en 3D
Une contrainte fait baisser la dimension de ton objet de 1 par rapport à la dimension de l'espace: une droite a une dimension dans un espace 2D et un plan a deux dimensions dans un espace 3D.
Pour passer d'un espace 3D à un objet qui a une dimension (une droite), il te faut deux contraintes: 3 - 2 = 1. Ces deux contraintes sont les équations de deux plans. L'intersection de ces deux plans est la droite. (essaie de visualiser ça si tu n'es pas convaincu)
C'est difficile de savoir comment rédiger ma réponse puisque je ne connais pas ton niveau en maths, mais disons pour faire simple que: trouver l'équation cartésienne d'une droite en 3D, c'est lourd!
On préférera travailler avec une équation paramétrique: imagine deux points distincts dans l'espace 3D. Ensuite, imagine le vecteur (orienté) qui les relie. Maintenant, imagine que tu multiplies ce vecteur par un scalaire quelconque (un nombre réel): le vecteur va devenir plus ou moins grand ou petit, et même se retourner quand tu multiplies par un nombre négatif. Se faisant, tu vas parcourir tous les points de la droite! Et ça, c'est super simple à gérer :).
Vecteur directeur = point1 - point2; (ou l'inverse, peu importe)
alors, tous les points de la droite sont du type:
double x = ...; (ce que tu veux)
pt_de_la_droite = directeur * x;
Ca te permet de passer en revue les points de la droite. Maintenant, si ce qu'il te faut, c'est calculer des intersections de droites avec d'autres droites ou avec des plans, c'est une autre histoire.
Qu'as-tu besoin de faire?
cs_fuliculi
Messages postés43Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 3 mai 20106 4 nov. 2007 à 13:52
L'équation est du type : ax + by + cz + d = 0
Par contre, le calcul de a, b, c et d doit être plus complexe.
Je n'ai pas les équations sous la main, désolé.
Si je les retrouve, je le rajouterais ici.
cyber_N
Messages postés4Date d'inscriptionlundi 20 décembre 2004StatutMembreDernière intervention14 janvier 2005 4 nov. 2007 à 12:15
"En plus, en complétant, on peut aussi travailler dans le domaine 3D voire temporel avec ax + by + cz + d = 0"
>> Comment fait-on pour trouver une droite 3D à partir de 2 points 3D ? -> Cela m'intéresserais !
merci,
merci Thony_c !
cs_fuliculi
Messages postés43Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 3 mai 20106 30 nov. 2005 à 10:04
Moi je mets 10/10, parce que vous oubliez un détail.
Lui travaille avec la forme ax + by + c 0, ce qui permet la gestion d'équation de type x 10, contrairement à la forme y = ax + b.
En plus, en complétant, on peut aussi travailler dans le domaine 3D voire temporel avec ax + by + cz + d = 0
La forme ax + by + c = 0 n'utilise pas de division, est donc plus précise et ne donne pas de valeur farfelues quand on approche 0.
La forme caninique est plus souvent utilisée dans le domaine scientifique (physique, aéronautique, ...)
Pour rappel : ax + by + c = 0 avec :
* a = y1 - y2;
* b = x2 - x1;
* c = x1*y2 - x2*y1;
Bravo Thony_c
4t0m!k
Messages postés4Date d'inscriptionsamedi 11 octobre 2003StatutMembreDernière intervention12 février 2008 10 mars 2004 à 23:32
//c bien ca?? ou ya mieu (I'm a shit g commencer hier :s )
cs_Chouchou182
Messages postés252Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention25 avril 20111 4 févr. 2004 à 14:11
Ca ca marche sur CASIO...
Alors lui donner des classes pour faire joli c'est peut-etre pas ce qu'il y a de mieux...
A++
Chouchou
cs_Chouchou182
Messages postés252Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention25 avril 20111 4 févr. 2004 à 14:08
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch ;
float x1, y1, x2, y2 ;
float a, b, c ;
menu:
printf("1 : Trouver l\'\202quation\n") ;
printf("2 : Trouver la droite \205 partir de son \202quation\n") ;
printf("0 : Quitter\n") ;
printf("\nTapez votre choix\n") ;
ch = getchar() ;
switch ( ch )
{
case 48: goto end ;
case 49: goto equation ;
case 50: goto droite ;
default: goto menu ;
}
equation:
fflush(stdin) ;
printf("1 : Deux points\n") ;
printf("2 : Un point et un vecteur\n") ;
printf("\nTapez votre choix\n") ;
ch = getchar() ;
if ( ch != 49 && ch != 50 ) goto equation ;
printf("\nEntrez les coordonn\202es ") ;
if ( ch == 49 ) printf("de deux points de la droite\n") ;
else printf("d\'un point de la droite et d\'un vecteur directeur de cette droite\n") ;
fflush(stdin) ;
printf("\nAbscisse du point A : ") ;
scanf("%f", & x1) ;
printf("\nOrdonn\202e du point A : ") ;
scanf("%f", & y1) ;
if ( ch == 49 )
{
printf("\nAbscisse du point B : ") ;
scanf("%f", & x2) ;
printf("\nOrdonn\202e du point B : ") ;
scanf("%f", & y2) ;
x2 -= x1 ;
y2 -= y1 ;
}
else
{
printf("\nAbscisse d\'un vecteur directeur de la droite : ") ;
scanf("%f", & x2) ;
printf("\nOrdonn\202e de ce vecteur directeur : ") ;
scanf("%f", & y2) ;
}
c = x2 * y1 - y2 * x1 ;
printf("\nL\'\202quation de la droite est : %f * x + %f * y + %f = 0\n", y2, -x2, c) ;
goto end ;
droite:
fflush(stdin) ;
printf("\nEntrez l\'\202quation de la droite (ax + by + c = 0) :\n") ;
printf("\nValeur de coefficient a : ") ;
scanf("%f", & a) ;
printf("\nValeur de coefficient b : ") ;
scanf("%f", & b) ;
printf("\nValeur de la constante c : ") ;
scanf("%f", & c) ;
if ( !b && !a )
{
printf("\nL\'\202quation propos\202e n\'a pas de solution !!!\n") ;
goto droite ;
}
if ( !b )
{
printf("\nLa droite est parall\212le \205 l\'axe des ordonn\202es : x = %f / %f = %f\n", -c, a, -c/a) ;
goto end ;
}
printf("\nLa droite est la repr\202sentation graphique de la fonction affine qui \205 x associe : %f * x + %f\n", -a/b, -c/b) ;
end:
system("pause") ;
return 0 ;
}
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 4 févr. 2004 à 13:51
je comprends pas comment tu as pu écrire un code aussi long. avec deux pts tu as ça:
double x1, y1, x2, y2;
//qq lignes pr récupérer ces valeurs avec std::cin
double a = (y2-y1)/(x2-x1);
//on sait que y1 = a*x1 + b, donc
double b = y1 - a*x1;
//et donc on a l'équation: y = ax + b
//et tu l'as ta droite
je vois que tu utilises une autre forme d'équation de droite, mais ça doit prendre 3 lignes de les convertir.
cs_koko
Messages postés654Date d'inscriptionlundi 14 janvier 2002StatutMembreDernière intervention20 février 2005 4 févr. 2004 à 12:40
j'ai eu une erreur en copiant le code dans dev-c++...
mais j'avais mis comme fichier : equa.c alors que c'est du cpp (donc equa.cpp que j'ai mis comme nom et ca a marché !)
Thony_c
Messages postés1Date d'inscriptionmardi 3 février 2004StatutMembreDernière intervention 3 février 2004 3 févr. 2004 à 21:00
C'est tu connais plus simple? Bah poste ta source pour voir car sa m'interresse vraiment, merci d'avance.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 3 févr. 2004 à 20:45
Pourquoi faire simple quand on peut faire compliqué, c'est ca?
4 nov. 2007 à 19:11
tu as répondu à ma question (passer par des vecteurs).
Bonne continuation à vous,
Sébastien.
4 nov. 2007 à 13:54
ax + by + c = 0 -> droite en 2D
ax + by + cz + d = 0 -> plan en 3D
Une contrainte fait baisser la dimension de ton objet de 1 par rapport à la dimension de l'espace: une droite a une dimension dans un espace 2D et un plan a deux dimensions dans un espace 3D.
Pour passer d'un espace 3D à un objet qui a une dimension (une droite), il te faut deux contraintes: 3 - 2 = 1. Ces deux contraintes sont les équations de deux plans. L'intersection de ces deux plans est la droite. (essaie de visualiser ça si tu n'es pas convaincu)
C'est difficile de savoir comment rédiger ma réponse puisque je ne connais pas ton niveau en maths, mais disons pour faire simple que: trouver l'équation cartésienne d'une droite en 3D, c'est lourd!
On préférera travailler avec une équation paramétrique: imagine deux points distincts dans l'espace 3D. Ensuite, imagine le vecteur (orienté) qui les relie. Maintenant, imagine que tu multiplies ce vecteur par un scalaire quelconque (un nombre réel): le vecteur va devenir plus ou moins grand ou petit, et même se retourner quand tu multiplies par un nombre négatif. Se faisant, tu vas parcourir tous les points de la droite! Et ça, c'est super simple à gérer :).
Vecteur directeur = point1 - point2; (ou l'inverse, peu importe)
alors, tous les points de la droite sont du type:
double x = ...; (ce que tu veux)
pt_de_la_droite = directeur * x;
Ca te permet de passer en revue les points de la droite. Maintenant, si ce qu'il te faut, c'est calculer des intersections de droites avec d'autres droites ou avec des plans, c'est une autre histoire.
Qu'as-tu besoin de faire?
4 nov. 2007 à 13:52
Par contre, le calcul de a, b, c et d doit être plus complexe.
Je n'ai pas les équations sous la main, désolé.
Si je les retrouve, je le rajouterais ici.
4 nov. 2007 à 12:15
>> Comment fait-on pour trouver une droite 3D à partir de 2 points 3D ? -> Cela m'intéresserais !
merci,
merci Thony_c !
30 nov. 2005 à 10:04
Lui travaille avec la forme ax + by + c 0, ce qui permet la gestion d'équation de type x 10, contrairement à la forme y = ax + b.
En plus, en complétant, on peut aussi travailler dans le domaine 3D voire temporel avec ax + by + cz + d = 0
La forme ax + by + c = 0 n'utilise pas de division, est donc plus précise et ne donne pas de valeur farfelues quand on approche 0.
La forme caninique est plus souvent utilisée dans le domaine scientifique (physique, aéronautique, ...)
Pour rappel : ax + by + c = 0 avec :
* a = y1 - y2;
* b = x2 - x1;
* c = x1*y2 - x2*y1;
Bravo Thony_c
10 mars 2004 à 23:32
using namespace std;
int main()
{
double x1, y1, x2, y2;
char r;
r = 'o';
while(r=='o')
{
cout<<"xA";
cin>>x1;
cout<<"yA";
cin>>y1;
cout<<"xB";
cin>>x2;
cout<<"yB";
cin>>y2;
double a = (y2-y1);
double a1 = (x2-x1);
double b = (y1 - a/a1*x1)*a1;
cout<<"y= "<>r;
}
return(0);
}
//c bien ca?? ou ya mieu (I'm a shit g commencer hier :s )
4 févr. 2004 à 14:11
Alors lui donner des classes pour faire joli c'est peut-etre pas ce qu'il y a de mieux...
A++
Chouchou
4 févr. 2004 à 14:08
#include <stdlib.h>
int main()
{
char ch ;
float x1, y1, x2, y2 ;
float a, b, c ;
menu:
printf("1 : Trouver l\'\202quation\n") ;
printf("2 : Trouver la droite \205 partir de son \202quation\n") ;
printf("0 : Quitter\n") ;
printf("\nTapez votre choix\n") ;
ch = getchar() ;
switch ( ch )
{
case 48: goto end ;
case 49: goto equation ;
case 50: goto droite ;
default: goto menu ;
}
equation:
fflush(stdin) ;
printf("1 : Deux points\n") ;
printf("2 : Un point et un vecteur\n") ;
printf("\nTapez votre choix\n") ;
ch = getchar() ;
if ( ch != 49 && ch != 50 ) goto equation ;
printf("\nEntrez les coordonn\202es ") ;
if ( ch == 49 ) printf("de deux points de la droite\n") ;
else printf("d\'un point de la droite et d\'un vecteur directeur de cette droite\n") ;
fflush(stdin) ;
printf("\nAbscisse du point A : ") ;
scanf("%f", & x1) ;
printf("\nOrdonn\202e du point A : ") ;
scanf("%f", & y1) ;
if ( ch == 49 )
{
printf("\nAbscisse du point B : ") ;
scanf("%f", & x2) ;
printf("\nOrdonn\202e du point B : ") ;
scanf("%f", & y2) ;
x2 -= x1 ;
y2 -= y1 ;
}
else
{
printf("\nAbscisse d\'un vecteur directeur de la droite : ") ;
scanf("%f", & x2) ;
printf("\nOrdonn\202e de ce vecteur directeur : ") ;
scanf("%f", & y2) ;
}
c = x2 * y1 - y2 * x1 ;
printf("\nL\'\202quation de la droite est : %f * x + %f * y + %f = 0\n", y2, -x2, c) ;
goto end ;
droite:
fflush(stdin) ;
printf("\nEntrez l\'\202quation de la droite (ax + by + c = 0) :\n") ;
printf("\nValeur de coefficient a : ") ;
scanf("%f", & a) ;
printf("\nValeur de coefficient b : ") ;
scanf("%f", & b) ;
printf("\nValeur de la constante c : ") ;
scanf("%f", & c) ;
if ( !b && !a )
{
printf("\nL\'\202quation propos\202e n\'a pas de solution !!!\n") ;
goto droite ;
}
if ( !b )
{
printf("\nLa droite est parall\212le \205 l\'axe des ordonn\202es : x = %f / %f = %f\n", -c, a, -c/a) ;
goto end ;
}
printf("\nLa droite est la repr\202sentation graphique de la fonction affine qui \205 x associe : %f * x + %f\n", -a/b, -c/b) ;
end:
system("pause") ;
return 0 ;
}
4 févr. 2004 à 13:51
double x1, y1, x2, y2;
//qq lignes pr récupérer ces valeurs avec std::cin
double a = (y2-y1)/(x2-x1);
//on sait que y1 = a*x1 + b, donc
double b = y1 - a*x1;
//et donc on a l'équation: y = ax + b
//et tu l'as ta droite
je vois que tu utilises une autre forme d'équation de droite, mais ça doit prendre 3 lignes de les convertir.
4 févr. 2004 à 12:40
mais j'avais mis comme fichier : equa.c alors que c'est du cpp (donc equa.cpp que j'ai mis comme nom et ca a marché !)
3 févr. 2004 à 21:00
3 févr. 2004 à 20:45