Это 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)
;
Обратите внимание: если вы используете удвоения, вы можете проверить поэпсилон:
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;
}