检查3点是否在同一条线上

时间:2010-09-28 14:16:39

标签: pseudocode

我想知道一段代码,它实际上可以告诉我2D空间中的3个点是否在同一条线上。伪代码也足够了,但Python更好。

5 个答案:

答案 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)。您只需替换适当的值。

Details

答案 3 :(得分:0)

阅读this,并使用它来查找前两点的直线方程。按照说明查找mb。然后,对于第三点,计算mx + b - y。如果结果为零,则第三个点与前两个点位于同一行。

答案 4 :(得分:0)

规则1:在任何线性2d空间中,两个点始终在同一条线上。

取2分并构建一个代表一条线的方程式。 然后检查第三个点是否也在该行上。

祝你好运。