Esta cuestión se puede abordar de diversas formas, sin embargo te mostramos la que para nosotros es la solución más completa.
Solución:
Pruebe este código que utiliza un producto cruzado:
public bool isLeft(Point a, Point b, Point c)
return ((b.X - a.X)*(c.Y - a.Y) - (b.Y - a.Y)*(c.X - a.X)) > 0;
Donde un = punto de línea 1; b = punto de línea 2; C = punto contra el que comprobar.
Si la fórmula es igual a 0, los puntos son colineales.
Si la línea es horizontal, entonces esto devuelve true si el punto está por encima de la línea.
Usar el signo del determinante de vectores (AB,AM)
donde M(X,Y)
es el punto de consulta:
position = sign((Bx - Ax) * (Y - Ay) - (By - Ay) * (X - Ax))
Está 0
en la línea, y +1
en un lado, -1
Por otro lado.
Miras el signo del determinante de
| x2-x1 x3-x1 |
| y2-y1 y3-y1 |
Será positivo para los puntos de un lado y negativo para el otro (y cero para los puntos de la propia línea).
No se te olvide recomendar esta división si te valió la pena.