Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geometry 如何从两点求直线的一般形式方程?_Geometry - Fatal编程技术网

Geometry 如何从两点求直线的一般形式方程?

Geometry 如何从两点求直线的一般形式方程?,geometry,Geometry,根据输入: 双x1,y1,x2,y2; 我怎样才能找到一般形式的方程(双a,b,c,其中ax+by+c=0) 注:我希望能够做到这一点的计算。因此,坡度截距形式的等效值如下: double-dx,dy; 双m,b; dx=x2-x1; dy=y2-y1; m=dy/dx; b=y1; 显然,这很简单,但我还没有找到一般方程形式的解(因为它可以做垂直线,所以更有用)。我已经看过我的线性代数书和两本关于计算几何的书(都太高级了,无法解释这一点)。通过减去两点(x2-x1,y2-y1)得到切线。将

根据输入:

双x1,y1,x2,y2;
我怎样才能找到一般形式的方程(双a,b,c,其中ax+by+c=0)

注:我希望能够做到这一点的计算。因此,坡度截距形式的等效值如下:

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

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

通过减去两点
(x2-x1,y2-y1)
得到切线。将其规格化并旋转90度以获得法向量
(a,b)
。取点积和其中一个点得到常数,
c
如果你从方程开始,你可以得到
(y2-y1)/(x2-x1)*(x-x1)
(这是由两点定义的线的方程),通过一些操作你可以得到
(y1-y2)*x+(x2-x1)*y+(x1-x2-x2)*y1+(y2-y1)*x1=0
,你可以认识到:

  • a=y1-y2
  • b=x2-x1
  • c=(x1-x2)*y1+(y2-y1)*x1
快捷方式步骤: “问题:(4,5)(3,-7)求解: m=-12/1然后 12x-y=48注意:m是一个坡度复制分子,粘贴“X” 正分数,负符号,在两者之间。 (提示:模拟符号=添加+复制符号) 1.将第二组更改为相反的标志, 2.将y1添加到y2(表示根据符号添加或减去它们), 3.将x1添加到x2(也意味着根据符号添加或减去它们), 4.然后将12和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);
}
main() { INTA、b、c; 字符x,y; a=5; b=10; c=15; x=2; y=3; printf(“直线方程为%dx+%dy=%d”,a、b、c); }
如果从定义两点直线的方程式开始

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

这种形式的另一个好处是,即使直线垂直,或者两个给定点相同,计算也不会爆炸。但是,计算后仍然需要进行验证,以便使用
a、b、c
参数的代码不会出现意外情况。此外,应规范化
(a、b)
的值,以避免出现数值问题。使用规范L2是非常典型的,因此
a^2+b^2=1
如果您使用单个系数进行后续计算,请注意,当它是垂直线时,这可能仍然会给您带来问题,因为它不会产生简化形式的垂直线。您可以将
c
简化为
x1*y2-x2*y1
(分发和收集)。仅供将来参考,这给出了Ax+By=C形式的系数,而不是Ax+By+C=0。这根本不是用户所要求的(他们在近5年前提出了这一要求)。该代码不计算任何内容;您只需手动计算,硬编码并将其打印到终端。您甚至将其限制为整数和字符(!?)。我已成为活跃会员两年多,以前从未见过类似的情况:)