Thread: Check if two lines intersect (not touch)?

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User
    Join Date
    Feb 2013
    Location
    Sweden
    Posts
    171

    Question Check if two lines intersect (not touch)?

    So I found this post about how to check if two lines intersect. How to check if two given line segments intersect? - GeeksforGeeks and it works. What I wanted to do is to modify it if possible so that it only tells me if the lines intersect, but it is not supposed to tell me if they touch.

    If the start- or endpoint of both lines touch / intersect with each other the program should not write that they intersect.

    Code from link modified a little bit:
    Code:
    // A C++ program to check if two given line segments intersect 
    #include <iostream> 
    using namespace std; 
      
    struct Point 
    { 
        int x; 
        int y; 
    }; 
      
    // 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(Point p, Point q, 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(Point p1, Point q1, Point p2, 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); 
    
    
    	std::cout << "o1: " << o1 << "\n";
    	std::cout << "o2: " << o2 << "\n";
    	std::cout << "o3: " << o3 << "\n";
    	std::cout << "o4: " << o4 << "\n";
        // General case 
        if (o1 != o2 && o3 != o4) 
            return true; 
      
        return false; // Doesn't fall in any of the above cases 
    } 
      
    // Driver program to test above functions 
    int main() 
    { 
        struct Point p1 = {1, 1}, q1 = {10, 1}; 
        struct Point p2 = {1, 2}, q2 = {10, 2}; 
      
        doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n"; 
      
        p1 = {10, 0}, q1 = {0, 10}; 
        p2 = {0, 0}, q2 = {10, 10}; 
        doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n"; 
      
        p1 = {-5, -5}, q1 = {0, 0}; 
        p2 = {1, 1}, q2 = {10, 10}; 
        doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n"; 
    
    
        // These lines should not intersect
        p1 = {-4, -2}, q1 = {4, 4}; 
        p2 = {4, 0}, q2 = {4, 4}; 
        doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n"; 
    
    
    	getchar();
        return 0; 
    }
    Last edited by Salem; 11-25-2018 at 01:51 PM. Reason: Remove crayola

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Ubuntu Touch
    By siavoshkc in forum Tech Board
    Replies: 7
    Last Post: 08-09-2013, 06:08 AM
  2. Check if two line segments intersect
    By kerrymaid in forum C Programming
    Replies: 7
    Last Post: 02-10-2013, 12:21 AM
  3. Touch typing
    By jacek in forum Tech Board
    Replies: 34
    Last Post: 12-01-2009, 10:27 PM
  4. Intersect-test-solution, whats it called?
    By Raven Arkadon in forum C++ Programming
    Replies: 2
    Last Post: 04-12-2008, 08:09 PM

Tags for this Thread