Пусть A, B, C - некоторые точки.
Самый простой способ проверить, лежат ли они на одной линии, - это пересчитать перекрестное произведение векторов.
B-A, C-A.
Если он равен нулю, они лежат на одной строке:
// X_ab, Y_ab - coordinates of vector B-A.
float X_ab = B.x - A.x
float Y_ab = B.y - A.y
// X_ac, Y_ac - coordinates of vector C-A.
float X_ac = C.x - A.x
float Y_ac = C.y - A.y
float crossproduct = Y_ab * X_ac - X_ab * Y_ac
if (crossproduct < EPS) // if crossprudct == 0
{
// on the same line.
} else {
// not on the same line.
}
После того как вы знаете, что A, B, C лежат на одной и той же линии, легко узнать, лежит ли B между A и C, бросая внутренний продукт векторов B-A и C-A. Если B лежит между A и C, то (B-A) имеет то же направление, что и (C-A), и внутренний продукт> 0, в противном случае <0: </p>
float innerproduct = X_ab * X_ac + Y_ab * Y_ac;
if (innerproduct > 0) {
// B is between A and C.
} else {
// B is not between A and C.
}