29 votes

Comment puis-je trouver l'équation de forme générale d'une ligne à partir de deux points ?

Étant donné l'entrée :

double x1,y1,x2,y2;

Comment puis-je trouver l'équation de forme générale (double a,b,c où ax + by + c = 0) ?

Remarque : je veux pouvoir faire cela par calcul. Donc l'équivalent pour la forme de l'ordonnée à l'origine serait quelque chose comme :

double dx, dy;
double m, b;

dx = x2 - x1;
dy = y2 - y1;
m = dy/dx;
b = y1;

Évidemment, c'est très simple, mais je n'ai pas réussi à trouver la solution pour la forme générale de l'équation (qui est plus utile puisqu'elle peut faire des lignes verticales). J'ai déjà regardé dans mon livre d'algèbre linéaire et dans deux livres sur la géométrie computationnelle (tous deux trop avancés pour expliquer ceci).

50voto

zplesivcak Points 2633

Si on part de l'équation y-y1 = (y2-y1)/(x2-x1) * (x-x1) (qui est l'équation de la droite définie par deux points), en faisant quelques manipulations, on peut obtenir (y1-y2) * x + (x2-x1) * y + (x1-x2)*y1 + (y2-y1)*x1 = 0 et vous pouvez le reconnaître :

  • a = y1-y2 ,
  • b = x2-x1 ,
  • c = (x1-x2)*y1 + (y2-y1)*x1 .

3voto

Antimony Points 13190

Obtenez la tangente en soustrayant les deux points. (x2-x1, y2-y1) . Normalisez-le et faites-le pivoter de 90 degrés pour obtenir le vecteur normal. (a,b) . Prenez le produit scalaire avec l'un des points pour obtenir la constante, c .

2voto

Gorevoy Dima Points 31

Si vous partez de l'équation de la ligne de définition de 2 points

(x - x1)/(x2 - x1) = (y - y1)/(y2 - y1)

vous pouvez obtenir l'équation suivante

x(y2 - y1) - y(x2 - x1) - x1*y2 + y1*x2 = 0

donc les coefficients seront :

  • a = y2 - y1
  • b = -(x2 - x1) = x1 - x2
  • c = y1*x2 - x1*y2

Mon implémentation de l'algorithme en C

inline v3 LineEquationFrom2Points(v2 P1, v2 P2) {
    v3 Result;

    Result.A = P2.y - P1.y;
    Result.B = -(P2.x - P1.x);
    Result.C = P1.y * P2.x - P1.x * P2.y;

    return(Result);
}

1voto

Peter Peter Points 11

Raccourcis : " Problème : (4,5) (3,-7) " Résolvez : m=-12/1 puis 12x-y= 48 " NOTE:m est une pente " COPIER LE NUMÉRATEUR, APPOSER "X". Fraction positive Signe négatif entre les deux. (conseil : signe similaire = additionner + copier le signe) 1. changer le deuxième ensemble en signes opposés, 2. ajouter y1 à y2 (ce qui signifie les ajouter ou les soustraire selon le signe), 3. ajouter x1 à x2 (ce qui signifie également les ajouter ou les soustraire en fonction du signe), 4. ensuite, multipliez 12 et 1 à n'importe lequel des problèmes posés. Après cela, " BOOM " Tada !, vous avez votre réponse

-4voto

namrta sharma Points 1
#include <stdio.h>
main()
{
    int a,b,c;
    char x,y;
    a=5;
    b=10;
    c=15;
    x=2;
    y=3;
    printf("the equation of line is %dx+%dy=%d" ,a,b,c);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X