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++
// C++ Implementation. To find the point of
// intersection of two lines
#include <bits/stdc++.h>
using namespace std;
// This pair is used to store the X and Y
// coordinates of a point respectively
#define pdd pair<double, double>
// Function used to display X and Y coordinates
// of a point
void displayPoint(pdd P)
{
cout << "(" << P.first << ", " << P.second
<< ")" << endl;
}
pdd lineLineIntersection(pdd A, pdd B, pdd C, pdd D)
{
// Line AB represented as a1x + b1y = c1
double a1 = B.second - A.second;
double b1 = A.first - B.first;
double c1 = a1*(A.first) + b1*(A.second);
// Line CD represented as a2x + b2y = c2
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)
{
// The lines are parallel. This is simplified
// by returning a pair of FLT_MAX
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);
}
}
// Driver code
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
{
// NOTE: Further check can be applied in case
// of line segments. Here, we have considered AB
// and CD as lines
cout << "The intersection of the given lines AB "
"and CD is: ";
displayPoint(intersection);
}
return 0;
}
Java
// Java Implementation. To find the point of
// intersection of two lines
// Class used to used to store the X and Y
// coordinates of a point respectively
class Point
{
double x,y;
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
// Method used to display X and Y coordinates
// of a point
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)
{
// Line AB represented as a1x + b1y = c1
double a1 = B.y - A.y;
double b1 = A.x - B.x;
double c1 = a1*(A.x) + b1*(A.y);
// Line CD represented as a2x + b2y = c2
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)
{
// The lines are parallel. This is simplified
// by returning a pair of FLT_MAX
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);
}
}
// Driver method
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
{
// NOTE: Further check can be applied in case
// of line segments. Here, we have considered AB
// and CD as lines
System.out.print("The intersection of the given lines AB " +
"and CD is: ");
Point.displayPoint(intersection);
}
}
}
Python3
# Python program to find the point of
# intersection of two lines
# Class used to used to store the X and Y
# coordinates of a point respectively
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
# Method used to display X and Y coordinates
# of a point
def displayPoint(self, p):
print(f"({p.x}, {p.y})")
def lineLineIntersection(A, B, C, D):
# Line AB represented as a1x + b1y = c1
a1 = B.y - A.y
b1 = A.x - B.x
c1 = a1*(A.x) + b1*(A.y)
# Line CD represented as a2x + b2y = c2
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):
# The lines are parallel. This is simplified
# by returning a pair of FLT_MAX
return Point(10**9, 10**9)
else:
x = (b2*c1 - b1*c2)/determinant
y = (a1*c2 - a2*c1)/determinant
return Point(x, y)
# Driver code
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:
# NOTE: Further check can be applied in case
# of line segments. Here, we have considered AB
# and CD as lines
print("The intersection of the given lines AB " + "and CD is: ")
intersection.displayPoint(intersection)
# This code is contributed by Saurabh Jaiswal
C#
using System;
// C# Implementation. To find the point of
// intersection of two lines
// Class used to used to store the X and Y
// coordinates of a point respectively
public class Point
{
public double x, y;
public Point(double x, double y)
{
this.x = x;
this.y = y;
}
// Method used to display X and Y coordinates
// of a point
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)
{
// Line AB represented as a1x + b1y = c1
double a1 = B.y - A.y;
double b1 = A.x - B.x;
double c1 = a1 * (A.x) + b1 * (A.y);
// Line CD represented as a2x + b2y = c2
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)
{
// The lines are parallel. This is simplified
// by returning a pair of FLT_MAX
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);
}
}
// Driver method
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
{
// NOTE: Further check can be applied in case
// of line segments. Here, we have considered AB
// and CD as lines
Console.Write("The intersection of the given lines AB " + "and CD is: ");
Point.displayPoint(intersection);
}
}
}
// This code is contributed by Shrikant13
JavaScript
<script>
// Javascript program to find the point of
// intersection of two lines
// Class used to used to store the X and Y
// coordinates of a point respectively
class Point
{
constructor(x, y)
{
this.x = x;
this.y = y;
}
// Method used to display X and Y coordinates
// of a point
displayPoint(p){
document.write("(" + p.x + ", " + p.y + ")");
}
}
function lineLineIntersection(A,B,C,D){
// Line AB represented as a1x + b1y = c1
var a1 = B.y - A.y;
var b1 = A.x - B.x;
var c1 = a1*(A.x) + b1*(A.y);
// Line CD represented as a2x + b2y = c2
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)
{
// The lines are parallel. This is simplified
// by returning a pair of FLT_MAX
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);
}
}
// Driver code
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{
// NOTE: Further check can be applied in case
// of line segments. Here, we have considered AB
// and CD as lines
document.write("The intersection of the given lines AB " + "and CD is: ");
intersection.displayPoint(intersection);
}
// This code is contributed by shruti456rawal
</script>
Output:
The intersection of the given lines AB and
CD is: (2.4, 2.4)
Time Complexity: O(1)
Auxiliary Space: O(1)
Similar Reads
Intersection point of two Linked Lists Given two singly linked lists that merge into a single Y-shaped list. The two lists initially have distinct paths but eventually converge at a common node, forming a Y-shape, the task is to find and return the node where the two lists merge.Intersection Point of two Linked ListsThe above diagram sho
15+ min read
Program to find the mid-point of a line Given two coordinates of a line starting is (x1,y1) and ending is (x2,y2) find out the mid-point of a line. Examples : Input : x1 = â1, y1 = 2, x2 = 3, y2 = â6 Output : 1,â2 Input : x1 = 6.4, y1 = 3 x2 = â10.7, y2 = 4 Output : â2.15, 3.5 The Midpoint Formula: The midpoint of two points, (x1, y2) and
3 min read
Find intersection point of lines inside a section Given N lines in two-dimensional space in y = mx + b form and a vertical section. We need to find out whether there is an intersection point inside the given section or not. Examples: In below diagram four lines are there, L1 : y = x + 2 L2 : y = -x + 7 L3 : y = -3 L4 : y = 2x â 7 and vertical secti
9 min read
Maximum points of intersection n lines You are given n straight lines. You have to find a maximum number of points of intersection with these n lines.Examples: Input : n = 4 Output : 6 Input : n = 2Output :1 Approach : As we have n number of line, and we have to find the maximum point of intersection using this n line. So this can be don
3 min read
Number of pairs of lines having integer intersection points Given two integer arrays P[] and Q[], where pi and qj for each 0 <= i < size(P) and 0 <= j < size(Q) represents the line equations x - y = -pi and x + y = qj respectively. The task is to find the number of pairs from P[] and Q[] having integer intersection points. Examples: Input: P[] =
5 min read