C++ Program to use above below primitive to test whether two lines intersect


Here is a C++ program to use above below primitive to test whether two lines intersect. It can be used to test whether a line intersects a line segment. It does if and only if one endpoint of the segment is to the left of the line and the other is to the right.

Algorithm

Begin
   For generating equation of the first line, generate random numbers for coefficient of x and y by using rand at every time of compilation.
   For generating equation of the second line, generate random numbers for coefficient of x and y by using rand at every time of compilation.
   Find the segment of line 1 as Y1.
   if (Y1 < 0)
      Find the segment of line 2
   if (Y2 >= 0)
      print they are intersecting.
   else if (Y2 < 0)
      print they are not intersecting.
   else if (Y1 >0)
      Find the segment of line 2
   if (Y2 <= 0)
      print they are intersecting.
   else if (Y2 >0)
      print they are not intersecting.
End.

Example Code

 Live Demo

#include<time.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>

using namespace std;
const int L = 2;
const int H= 20;
int main(int argc, char **argv) {
   time_t s;
   time(&s);
   srand((unsigned int) s);

   int x1, x2, y1, y2;
   x1 = rand() % (H - L+ 1) + L;
   x2 = rand() % (H - L+ 1) + L;
   y1 = rand() % (H- L+ 1) + L;
   y2 = rand() % (H - L + 1) + L;

   cout << "The Equation of the 1st line is : (" << (y2 - y1) << ")x+(" << (x1 - x2) << ")y+(" << (x2 * y1 - x1 * y2) << ") = 0\n";

   int p1, p2, q1, q2;
   p1 = rand() % (H- L+ 1) + L;
   p2 = rand() % (H- L + 1) + L;
   q1 = rand() % (H - L + 1) + L;
   q2 = rand() % (H - L + 1) + L;

   cout << "The Equation of the 2nd line is : (" << (q2 - q1) << ")x+(" << (p1 - p2) << ")y+(" << (p2 * q1 - p1 * q2) << ") = 0\n";

   int Y1 = (y2 - y1) * p1 + (x1 - x2) * q1 + (x2 * y1 - x1 * y2); //Y1 segment
   if (Y1 < 0) {
      int Y2 = (y2 - y1) * p2 + (x1 - x2) * q2 + (x2 * y1 - x1 * y2); //Y2 segment
   if (Y2 >= 0)
      cout << "Lines are intersecting";
   else if (Y2 < 0)
      cout << "Lines are not intersecting";
   } else if (Y1 >0) {
      int Y2 = (y2 - y1) * p2 + (x1 - x2) * q2 + (x2 * y1 - x1 * y2);
      if (Y2 <= 0)
         cout << "Lines are intersecting";
      else if (Y2 >0)
         cout << "Lines are not intersecting";
   } else
      cout << "The point lies on the line";
   return 0;
}

Output

The Equation of the 1st line is : (-3)x+(2)y+(1) = 0
The Equation of the 2nd line is : (-5)x+(-5)y+(130) = 0
Lines are intersecting


The Equation of the 1st line is : (-1)x+(7)y+(-15) = 0
The Equation of the 2nd line is : (-4)x+(4)y+(-8) = 0
Lines are not intersecting

Updated on: 30-Jul-2019

149 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements