Найдите точки за строкой, используя Python

Обращаясь к заданному вопросу. Рисуя линию с учетом угла и точки на линии , я написал функцию python «find_normal», которая возвращает наклон и y-перехват нормального вектора в заданную точку под заданным углом.

Теперь у меня есть список точек, и я хочу проверить, находятся ли эти точки вне этого нормального вектора в направлении заданного угла нет. например

  • Angle = 180: True, если точка находится слева от строки, false в противном случае
  • Angle = 0: True, если точка находится справа от линии, false в противном случае
  • 0 <Угол <180: Истина, если точка находится ниже линии, false в противном случае
  • 180 <Угол <360: Истина, если точка выше линии, false в противном случае

Для этого я написал еще одну функцию find_points_ahead, которая использует результаты find_normal, чтобы выделить все точки за пределами обычного вектора. Как показано на снимке экрана ниже.

введите описание изображения здесь

Но под некоторыми углами также выделяются некоторые моменты, которые не соответствуют критериям. Например, стрелка направлена ​​вниз, и только точки ниже красной линии должны быть подсвечены. Вместо этого были выделены некоторые точки над линией. Может ли кто-нибудь помочь мне здесь?

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 result<0: cv2.circle(img,(pt_x,pt_y),3,[0,0,255],3,cv2.LINE_AA) elif angle>180 and angle<360 and result>0: cv2.circle(img,(pt_x,pt_y),3,[0,0,255],3,cv2.LINE_AA) 

Python - лучший язык программирования в мире.