29

给定输入:

double x1,y1,x2,y2;

如何找到一般形式的方程 (double a,b,c where ax + by + c = 0) ?

注意:我希望能够通过计算来做到这一点。所以斜率截距形式的等价物是这样的:

double dx, dy;
double m, b;

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

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

4

5 回答 5

48

如果你从方程开始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.
于 2012-11-06T00:51:16.423 回答
3

两点相减得到正切(x2-x1, y2-y1)。对其进行归一化并旋转 90 度以获得法线向量(a,b)。取其中一个点的点积得到常数,c

于 2012-11-06T00:43:19.030 回答
2

如果从 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);
}
于 2018-10-11T09:25:51.287 回答
1

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

于 2014-01-18T11:11:20.257 回答
-4
#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);
}
于 2017-08-10T06:29:36.413 回答