Solución:
Puede intentar utilizar un producto cruzado: http://en.wikipedia.org/wiki/Cross_product.
v1 = (x2-x1, y2-y1) # Vector 1
v2 = (x2-xA, y2-yA) # Vector 1
xp = v1[0]*v2[1] - v1[1]*v2[0] # Cross product
if xp > 0:
print 'on one side'
elif xp < 0:
print 'on the other'
else:
print 'on the same line!'
Necesitarías calibrar lo que es cada lado. Si desea que esté “debajo” o “arriba”, debe asegurarse de que los puntos de la línea estén ordenados horizontalmente.
No he probado esto.
Editar Inicialmente puse la fórmula del producto escalar. : o
Editar 2 Oh, estaba poniendo las coordenadas en un conjunto en lugar de una tupla. Utilizando namedtuple('point', 'x y')
para los vectores es bueno si está ejecutando una versión razonablemente moderna de Python.
Afortunadamente encontré Cálculo del producto cruzado de un vector 2D.
Podría intentar usar un producto cruzado, pero el truco es cómo elegir el punto para formar un vector, aquí elijo el punto más cercano de los puntos, supongo que obtuve el punto A (puede calcular los puntos de bucle para calcular la distancia desde el punto de bucle a la línea ):
v1 = {x2-x1, y2-y1} # Vector 1
v2 = {xA-x1, yA-y1} # Vector 2
cross_product = v1.x*v2.y - v1.y*v2.x
if cross_product > 0:
print 'pointA is on the counter-clockwise side of line'
elif cross_product < 0:
print 'pointA is on the clockwise side of line'
else:
print 'pointA is exactly on the line'