Пересекаются ли отрезки?



Даны два отрезка
Необходимо проверить, пересекаются ли они

Если два конца первого отрезка имеют разные знаки положения относительно прямой, проходящей через второй отрезок, и аналогичное условие выполняется для второго отрезка, то отрезки пересекаются.
Если оба отрезка лежат на одной прямой, то отрезки будут пересекаться, если граница одного отрезка принадлежит другому.


Листинг C++

bool is_cross_segment (point p1, point p2, point p3, point p4)
{
    line l1 = toline(p1, p2);
    line l2 = toline(p3, p4);
    int sign1 = point_in_line(l1, p3) * point_in_line(l1, p4);
    int sign2 = point_in_line(l2, p1) * point_in_line(l2, p2);

    if (abs(sign1) <= eps && abs(sign2) <= eps)
        return point_in_box(p1, p3, p4) || point_in_box(p2, p3, p4) ||
               point_in_box(p3, p1, p2) || point_in_box(p4, p1, p2);
    return sign1 <= eps && sign2 <= eps;
}

25.06.2007, 16:49

По всем вопросам обращаться: rumterg@gmail.com