鉴于输入:
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;
显然,这很简单,但我找不到一般方程式的解决方案(由于它可以做垂直线,因此更有用)。我已经查看了我的线性代数书和两本关于计算几何的书(两者都很先进,无法解释这一点)。
答案 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
所以系数将是:
我在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);
}