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

mim*_*pus 22 geometry

鉴于输入:

double x1,y1,x2,y2;
Run Code Online (Sandbox Code Playgroud)

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

注意:我希望能够以计算方式完成此操作.所以斜率截距形式的等价物将是这样的:

double dx, dy;
double m, b;

dx = x2 - x1;
dy = y2 - y1;
m = dy/dx;
b = y1;
Run Code Online (Sandbox Code Playgroud)

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

ple*_*siv 39

如果从等式开始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.

  • 您可以将`c`简化为`x1*y2 - x2*y1`(分发和收集). (4认同)
  • 仅供将来参考,这给出了 Ax + By = C 形式的系数,而不是 Ax + By + C = 0 (3认同)
  • 此外,应该对"(a,b)`的值进行归一化以避免数值问题.使用范数L2是非常典型的,因此`a ^ 2 + b ^ 2 = 1` (2认同)
  • 如果您正在使用单个系数来进行计算,请注意,当它是垂直线时,这可能仍然会给您带来问题,因为它不会以简化形式产生垂直 (2认同)