Program for Point of Intersection of Two Lines
Last Updated :
16 Jun, 2022
Given points A and B corresponding to line AB and points P and Q corresponding to line PQ, find the point of intersection of these lines. The points are given in 2D Plane with their X and Y Coordinates. Examples:
Input : A = (1, 1), B = (4, 4)
C = (1, 8), D = (2, 4)
Output : The intersection of the given lines
AB and CD is: (2.4, 2.4)
Input : A = (0, 1), B = (0, 4)
C = (1, 8), D = (1, 4)
Output : The given lines AB and CD are parallel.
First of all, let us assume that we have two points (x1, y1) and (x2, y2). Now, we find the equation of line formed by these points. Let the given lines be :
- a1x + b1y = c1
- a2x + b2y = c2
We have to now solve these 2 equations to find the point of intersection. To solve, we multiply 1. by b2 and 2 by b1 This gives us, a1b2x + b1b2y = c1b2 a2b1x + b2b1y = c2b1 Subtracting these we get, (a1b2 – a2b1) x = c1b2 – c2b1 This gives us the value of x. Similarly, we can find the value of y. (x, y) gives us the point of intersection. Note: This gives the point of intersection of two lines, but if we are given line segments instead of lines, we have to also recheck that the point so computed actually lies on both the line segments. If the line segment is specified by points (x1, y1) and (x2, y2), then to check if (x, y) is on the segment we have to just check that
- min (x1, x2) <= x <= max (x1, x2)
- min (y1, y2) <= y <= max (y1, y2)
The pseudo code for the above implementation:
determinant = a1 b2 - a2 b1
if (determinant == 0)
{
// Lines are parallel
}
else
{
x = (c1b2 - c2b1)/determinant
y = (a1c2 - a2c1)/determinant
}
These can be derived by first getting the slope directly and then finding the intercept of the line.
C++
#include <bits/stdc++.h>
using namespace std;
#define pdd pair<double, double>
void displayPoint(pdd P)
{
cout << "(" << P.first << ", " << P.second
<< ")" << endl;
}
pdd lineLineIntersection(pdd A, pdd B, pdd C, pdd D)
{
double a1 = B.second - A.second;
double b1 = A.first - B.first;
double c1 = a1*(A.first) + b1*(A.second);
double a2 = D.second - C.second;
double b2 = C.first - D.first;
double c2 = a2*(C.first)+ b2*(C.second);
double determinant = a1*b2 - a2*b1;
if (determinant == 0)
{
return make_pair(FLT_MAX, FLT_MAX);
}
else
{
double x = (b2*c1 - b1*c2)/determinant;
double y = (a1*c2 - a2*c1)/determinant;
return make_pair(x, y);
}
}
int main()
{
pdd A = make_pair(1, 1);
pdd B = make_pair(4, 4);
pdd C = make_pair(1, 8);
pdd D = make_pair(2, 4);
pdd intersection = lineLineIntersection(A, B, C, D);
if (intersection.first == FLT_MAX &&
intersection.second==FLT_MAX)
{
cout << "The given lines AB and CD are parallel.\n" ;
}
else
{
cout << "The intersection of the given lines AB "
"and CD is: " ;
displayPoint(intersection);
}
return 0;
}
|
Java
class Point
{
double x,y;
public Point( double x, double y)
{
this .x = x;
this .y = y;
}
static void displayPoint(Point p)
{
System.out.println( "(" + p.x + ", " + p.y + ")" );
}
}
class Test
{
static Point lineLineIntersection(Point A, Point B, Point C, Point D)
{
double a1 = B.y - A.y;
double b1 = A.x - B.x;
double c1 = a1*(A.x) + b1*(A.y);
double a2 = D.y - C.y;
double b2 = C.x - D.x;
double c2 = a2*(C.x)+ b2*(C.y);
double determinant = a1*b2 - a2*b1;
if (determinant == 0 )
{
return new Point(Double.MAX_VALUE, Double.MAX_VALUE);
}
else
{
double x = (b2*c1 - b1*c2)/determinant;
double y = (a1*c2 - a2*c1)/determinant;
return new Point(x, y);
}
}
public static void main(String args[])
{
Point A = new Point( 1 , 1 );
Point B = new Point( 4 , 4 );
Point C = new Point( 1 , 8 );
Point D = new Point( 2 , 4 );
Point intersection = lineLineIntersection(A, B, C, D);
if (intersection.x == Double.MAX_VALUE &&
intersection.y == Double.MAX_VALUE)
{
System.out.println( "The given lines AB and CD are parallel." );
}
else
{
System.out.print( "The intersection of the given lines AB " +
"and CD is: " );
Point.displayPoint(intersection);
}
}
}
|
Python3
class Point:
def __init__( self , x, y):
self .x = x
self .y = y
def displayPoint( self , p):
print (f "({p.x}, {p.y})" )
def lineLineIntersection(A, B, C, D):
a1 = B.y - A.y
b1 = A.x - B.x
c1 = a1 * (A.x) + b1 * (A.y)
a2 = D.y - C.y
b2 = C.x - D.x
c2 = a2 * (C.x) + b2 * (C.y)
determinant = a1 * b2 - a2 * b1
if (determinant = = 0 ):
return Point( 10 * * 9 , 10 * * 9 )
else :
x = (b2 * c1 - b1 * c2) / determinant
y = (a1 * c2 - a2 * c1) / determinant
return Point(x, y)
A = Point( 1 , 1 )
B = Point( 4 , 4 )
C = Point( 1 , 8 )
D = Point( 2 , 4 )
intersection = lineLineIntersection(A, B, C, D)
if (intersection.x = = 10 * * 9 and intersection.y = = 10 * * 9 ):
print ( "The given lines AB and CD are parallel." )
else :
print ( "The intersection of the given lines AB " + "and CD is: " )
intersection.displayPoint(intersection)
|
C#
using System;
public class Point
{
public double x, y;
public Point( double x, double y)
{
this .x = x;
this .y = y;
}
public static void displayPoint(Point p)
{
Console.WriteLine( "(" + p.x + ", " + p.y + ")" );
}
}
public class Test
{
public static Point lineLineIntersection(Point A, Point B, Point C, Point D)
{
double a1 = B.y - A.y;
double b1 = A.x - B.x;
double c1 = a1 * (A.x) + b1 * (A.y);
double a2 = D.y - C.y;
double b2 = C.x - D.x;
double c2 = a2 * (C.x) + b2 * (C.y);
double determinant = a1 * b2 - a2 * b1;
if (determinant == 0)
{
return new Point( double .MaxValue, double .MaxValue);
}
else
{
double x = (b2 * c1 - b1 * c2) / determinant;
double y = (a1 * c2 - a2 * c1) / determinant;
return new Point(x, y);
}
}
public static void Main( string [] args)
{
Point A = new Point(1, 1);
Point B = new Point(4, 4);
Point C = new Point(1, 8);
Point D = new Point(2, 4);
Point intersection = lineLineIntersection(A, B, C, D);
if (intersection.x == double .MaxValue && intersection.y == double .MaxValue)
{
Console.WriteLine( "The given lines AB and CD are parallel." );
}
else
{
Console.Write( "The intersection of the given lines AB " + "and CD is: " );
Point.displayPoint(intersection);
}
}
}
|
Javascript
<script>
class Point
{
constructor(x, y)
{
this .x = x;
this .y = y;
}
displayPoint(p){
document.write( "(" + p.x + ", " + p.y + ")" );
}
}
function lineLineIntersection(A,B,C,D){
var a1 = B.y - A.y;
var b1 = A.x - B.x;
var c1 = a1*(A.x) + b1*(A.y);
var a2 = D.y - C.y;
var b2 = C.x - D.x;
var c2 = a2*(C.x)+ b2*(C.y);
var determinant = a1*b2 - a2*b1;
if (determinant == 0)
{
return new Point(Number.MAX_VALUE, Number.MAX_VALUE);
}
else
{
var x = (b2*c1 - b1*c2)/determinant;
var y = (a1*c2 - a2*c1)/determinant;
return new Point(x, y);
}
}
let A = new Point(1, 1);
let B = new Point(4, 4);
let C = new Point(1, 8);
let D = new Point(2, 4);
var intersection = lineLineIntersection(A, B, C, D);
if (intersection.x == Number.MAX_VALUE && intersection.y == Number.MAX_VALUE){
document.write( "The given lines AB and CD are parallel." );
} else {
document.write( "The intersection of the given lines AB " + "and CD is: " );
intersection.displayPoint(intersection);
}
</script>
|
Output:
The intersection of the given lines AB and
CD is: (2.4, 2.4)
Time Complexity: O(1)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...