Расположение точки относительно прямой

Необходимо написать функцию, которая будет возвращать, с какой стороны расположена точка относительно прямой. Не могу придумать формулу для реализации данной задачи. Нашла такаю: (x - x1) * (y2 - y1) - (x2 - x1) * (y - y1) = 0, но она не везде работает корректно. То есть она выдает неверный результат, если прямая в вертикальном/горизонтальном положении; если координаты прямой расположены в разных четвертях((


Ответы (1 шт):

Автор решения: dresqd

Как-то так. Вроде бы подробно расписал, но если появятся вопросы спрашивайте в комментариях - отвечу.

def dotpos( dot1: tuple, dot2: tuple, dot: tuple) -> str:
    # проверка горизонтальности прямой
    if dot1[1] == dot2[1]:
        if dot[1] < dot1[1]:
            return "прямая горизонтальна, точка лежит снизу от прямой"
        elif dot[1] > dot1[1]:
            return "прямая горизонтальна, точка лежит снизу от прямой"
        else:
            return "прямая горизонтальна, точка лежит на прямой"
    # проверка вертикальности прямой
    if dot1[0] == dot2[0]:
        if dot[0] < dot1[0]:
            return "прямая вертикальна, точка лежит слева от прямой"
        elif dot[0] > dot1[0]:
            return "прямая вертикальна, точка лежит справа от прямой"
        else:
            return "прямая вертикальна, точка лежит на прямой"
    # нахождение коэффициента наклона прямой(k) из уравнения y=kx+b
    k = (dot2[1] - dot1[1]) / (dot2[0] - dot1[0])
    # нахождение сдвига(b)
    b = dot1[1] - k * dot1[0]
    # будем сравнивать координату X точки с координатой X прямой при одном и том же Y(по идее можно и Y сравнивать, без разницы)
    # находим X точки на прямой, Y которой совпадает с Y dot
    x = (dot[1]-b)/k
    # сравниваем координаты
    if x > dot[0]:
        print("Точка слева от прямой")
    elif x<dot[0]:
        print("Точка справа от прямой")
    else:
        print("Точка лежит на прямой")
→ Ссылка