Encuentra los puntos más allá de una línea usando Python

Con referencia a la pregunta formulada aquí Dibujando una línea dado el ángulo y un punto en la línea , escribí una función de python “find_normal” que devuelve la pendiente y la intersección y del vector normal a un punto dado en un ángulo dado.

Ahora tengo una lista de puntos y quiero verificar si estos puntos están más allá de ese vector normal en la dirección del ángulo dado de no. p.ej

  • Ángulo = 180: Verdadero si el punto está a la izquierda de la línea, falso de lo contrario
  • Ángulo = 0: Verdadero si el punto está a la derecha de la línea, falso de lo contrario
  • 0 <Ángulo <180: Verdadero si el punto está debajo de la línea, falso en caso contrario
  • 180 <Ángulo <360: Verdadero si el punto está sobre la línea, falso de lo contrario

Para este propósito, he escrito otra función find_points_ahead que usa los resultados de find_normal para resaltar todos los puntos más allá del vector normal. Como se muestra en la captura de pantalla de abajo.

introduzca la descripción de la imagen aquí

Pero en algunos angularjs, algunos puntos que no cumplen con los criterios también se destacan. Por ejemplo, la flecha apunta hacia abajo y solo los puntos debajo de la línea roja deberían estar resaltados. En cambio, algunos de los puntos por encima de la línea también se destacaron. ¿Puede alguien ayudarme aquí?

def find_normal(img,point,angle): x1=point[0] y1=point[1] angle_rad=np.radians(angle) c=-1*np.sin(angle_rad) s=np.cos(angle_rad) start_x=int(x1 - c * 640) start_y=int(y1 - s * 640) end_x=int(x1 + c * 640) end_y=int(y1 + s * 640) m=int((end_y-start_y)/(end_x-start_x)) y_intercept=end_y-(m*end_x) cv2.line(img, (start_x,start_y), (end_x,end_y), [0, 0, 255], 3, cv2.LINE_AA) return m,y_intercept def find_points_ahead(img,base_point,angle,points): m,c=find_normal(img,base_point,angle) for pt in points: pt_x=pt[0] pt_y=pt[1] result=m*pt_x-pt_y+c if angle>0 and angle<180 and result180 and angle0: cv2.circle(img,(pt_x,pt_y),3,[0,0,255],3,cv2.LINE_AA) 

Si c y s son el coseno y el seno del ángulo, la función debe devolver True para un punto (x, y) si f c * (x-x1) + s * (y-y1)> = 0 donde (x1, y1) es Cualquier punto en la línea roja.