"TROUVER L'ÉQUATION D'UNE DROITE À PARTIR DE DEUX POINTS"

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 3 févr. 2004 à 20:45
cyber_N Messages postés 4 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 14 janvier 2005 - 4 nov. 2007 à 19:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20095-trouver-l-equation-d-une-droite-a-partir-de-deux-points

cyber_N Messages postés 4 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 14 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és 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 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és 43 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 3 mai 2010 6
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és 4 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 14 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és 43 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 3 mai 2010 6
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és 4 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 12 février 2008
10 mars 2004 à 23:32
#include

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 )
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
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és 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
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és 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 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és 654 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 20 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és 1 Date d'inscription mardi 3 février 2004 Statut Membre Derniè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és 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
3 févr. 2004 à 20:45
Pourquoi faire simple quand on peut faire compliqué, c'est ca?
Rejoignez-nous