我希望知道一段能够判断在二维空间中三个点是否在同一条直线上的代码。提供伪代码也可以,但是Python更好。
我希望知道一段能够判断在二维空间中三个点是否在同一条直线上的代码。提供伪代码也可以,但是Python更好。
你可以检查ABC三角形的面积是否为0:
[ Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By) ] / 2
当然,实际上你并不需要除以2。
stuff < err_tolerance
而不是像@dcp在上面所做的那样使用stuff1 == stuff2
). - Joe Kington这是C++的代码,但你可以将它适应为Python:
bool collinear(int x1, int y1, int x2, int y2, int x3, int y3) {
return (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2);
}
基本上,我们正在检查点1和点2以及点1和点3之间的斜率是否匹配。斜率是y的变化量除以x的变化量,因此我们有:
y1 - y2 y1 - y3
------- = --------
x1 - x2 x1 - x3
对等式进行叉乘得到 (y1 - y2) * (x1 - x3) == (y1 - y3) * (x1 - x2)
;
注意,如果你使用的是双精度浮点数,可以和一个 epsilon 做比较:
bool collinear(double x1, double y1, double x2, double y2, double x3, double y3) {
return fabs((y1 - y2) * (x1 - x3) - (y1 - y3) * (x1 - x2)) <= 1e-9;
}
y - y0 = a(x-x0)
(1),其中 a = (y1 - y0)/(x1 - x0)
,且 A(x0, y0)
、B(x1, y1)
、C(x2, y2)
。查看 C
是否满足(1)。只需替换相应的值即可。
规则1: 在任何线性二维空间中,两个点总是在同一条直线上。
取两个点并建立一个代表它们之间的直线方程。然后检查第三个点是否也在该直线上。
祝你好运。