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
#包括
#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
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年前提出了这一要求)。该代码不计算任何内容;您只需手动计算,硬编码并将其打印到终端。您甚至将其限制为整数和字符(!?)。我已成为活跃会员两年多,以前从未见过类似的情况:)