-1

I found an algorithm on GeeksForGeeks for C language and it's look like this:

struct Point
{
    int x;
    int y;
};

// Given three colinear points p, q, r, the function checks if
// point q lies on line segment 'pr'
bool onSegment(struct Point p, struct Point q, struct Point r)
{
    if (q.x <= max(p.x, r.x) && q.x >= min(p.x, r.x) &&
        q.y <= max(p.y, r.y) && q.y >= min(p.y, r.y))
       return true;

    return false;
}

// To find orientation of ordered triplet (p, q, r).
// The function returns following values
// 0 --> p, q and r are colinear
// 1 --> Clockwise
// 2 --> Counterclockwise
int orientation(struct Point p, struct Point q, struct Point r)
{
    // See https://www.geeksforgeeks.org/orientation-3-ordered-points/
    // for details of below formula.
    int val = (q.y - p.y) * (r.x - q.x) -
              (q.x - p.x) * (r.y - q.y);

    if (val == 0) return 0;  // colinear

    return (val > 0)? 1: 2; // clock or counterclock wise
}

// The main function that returns true if line segment 'p1q1'
// and 'p2q2' intersect.
bool doIntersect(struct Point p1, struct Point q1, struct Point p2, struct Point q2)
{
    // Find the four orientations needed for general and
    // special cases
    int o1 = orientation(p1, q1, p2);
    int o2 = orientation(p1, q1, q2);
    int o3 = orientation(p2, q2, p1);
    int o4 = orientation(p2, q2, q1);

    // General case
    if (o1 != o2 && o3 != o4)
        return true;

    // Special Cases
    // p1, q1 and p2 are colinear and p2 lies on segment p1q1
    if (o1 == 0 && onSegment(p1, p2, q1)==true) return true;

    // p1, q1 and q2 are colinear and q2 lies on segment p1q1
    if (o2 == 0 && onSegment(p1, q2, q1)==true) return true;

    // p2, q2 and p1 are colinear and p1 lies on segment p2q2
    if (o3 == 0 && onSegment(p2, p1, q2)==true) return true;

     // p2, q2 and q1 are colinear and q1 lies on segment p2q2
    if (o4 == 0 && onSegment(p2, q1, q2)==true) return true;

    return false; // Doesn't fall in any of the above cases
}

But problem is that I want for lines that have one same point not to be true.

So if I try for

p1(-1, 4), q1(-1, 1); 
p2(-1, 1), q2(0, 0);

points q1 and p2 are the same and it's says that lines intersect.

kiner_shah
  • 3,939
  • 7
  • 23
  • 37

1 Answers1

1

Mathematically, it doesn't make sense.

If two lines share a same point, they intersect (at least) at that point. You could also have 4 different points, and the two lines intersect at every point in them.

It is really obscure what you're trying to achieve, maybe that's not the way to go. But in terms of solution to your problem, you could just check if any two points are equal before the intersection algorithm and, if they are, no need to run it, you already have your answer.

Yuri J
  • 129
  • 7