如何从两点找到一条线的一般形式方程?

时间:2012-11-06 00:39:52

标签: geometry

鉴于输入:

double x1,y1,x2,y2;

如何找到一般形式方程(双a,b,c,其中ax + by + c = 0)?

注意:我希望能够以计算方式完成此操作。因此,斜率截距形式的等价物将类似于:

double dx, dy;
double m, b;

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

显然,这很简单,但我找不到一般方程式的解决方案(由于它可以做垂直线,因此更有用)。我已经查看了我的线性代数书和两本关于计算几何的书(两者都很先进,无法解释这一点)。

5 个答案:

答案 0 :(得分:36)

如果你从等式y-y1 = (y2-y1)/(x2-x1) * (x-x1)开始(这是由两点定义的直线的等式),通过一些操作你可以获得(y1-y2) * x + (x2-x1) * y + (x1-x2)*y1 + (y2-y1)*x1 = 0,你可以认识到:

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

答案 1 :(得分:3)

通过减去两个点(x2-x1, y2-y1)得到切线。将其标准化并旋转90度以获得法线向量(a,b)。使用其中一个点的点积得到常数c

答案 2 :(得分:1)

快捷方式步骤: “问题:(4,5)(3,-7)” 的解: m = -12 / 1 然后 12x-y = 48 注意:m是斜率复制数字,AFFIX“X” 正分数之间的负号。 (提示:simmilar sign = add + copy the sign) 1.将第二组改为相反的符号, 2.ADD y1到y2(意味着根据符号添加或减去它们), 3.ADD x1到x2(也意味着根据符号添加或减去它们), 4.然后将12和1乘以任何问题集。 在那之后“ BOOM ”Tada!,你有答案

答案 3 :(得分:0)

如果从从2点定义直线的方程式开始

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

您可以得到下一个方程

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

所以系数将是:

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

我在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);
}

答案 4 :(得分:-3)

#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);
}