我想知道一段代码,它实际上可以告诉我2D空间中的3个点是否在同一条线上。伪代码也足够了,但Python更好。
答案 0 :(得分:62)
您可以检查ABC三角形的区域是否为0:
[ Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By) ] / 2
当然,你实际上并不需要除以2。
答案 1 :(得分:52)
这是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;
}
答案 2 :(得分:0)
y - y0 = a(x-x0)
(1)a = (y1 - y0)/(x1 - x0)
和A(x0, y0)
B(x1, y1)
C(x2, y2)
。查看C
是否满足(1)。您只需替换适当的值。
答案 3 :(得分:0)
阅读this,并使用它来查找前两点的直线方程。按照说明查找m
和b
。然后,对于第三点,计算mx + b - y
。如果结果为零,则第三个点与前两个点位于同一行。
答案 4 :(得分:0)
规则1:在任何线性2d空间中,两个点始终在同一条线上。
取2分并构建一个代表一条线的方程式。 然后检查第三个点是否也在该行上。
祝你好运。