Find foot of perpendicular from a point in 2 D plane to a Line

Given a point P in 2-D plane and equation of a line, the task is to find the foot of the perpendicular from P to the line.

Note: Equation of line is in form ax+by+c=0.

Examples:



Input :  P=(1, 0), a = -1, b = 1, c = 0
Output : Q = (0.5, 0.5)
The foot of perpendicular from point (1, 0) 
to line -x + y = 0 is (0.5, 0.5)

Input :  P=(3, 3), a = 0, b = 1, c = -2
Output : Q = (3, 2)
The foot of perpendicular from point (3, 3) 
to line y-2 = 0 is (3, 2)


Since equation of the line is given to be of the form ax + by + c = 0. Equation of line passing through P and is perpendicular to line. Therefore equation of line passing through P and Q becomes ay – bx + d = 0. Also P passes through line passing through P and Q, so we put coordinate of P in the above equation:

ay1 - bx1 + d = 0 
or, d = bx1 - ay1

Also, Q is the intersection of the given line and the line passing through P and Q. So we can find the solution of:

ax + by + c = 0
and,
ay - bx + (bx1-ay1) = 0

Since a, b, c, d all are known we can find x and y here as:

Below is the implementataion of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program for implementation of
// the above approach
#include <iostream>
using namespace std;
  
// Function to find foot of perpendicular from
// a point in 2 D plane to a Line
pair<double, double> findFoot(double a, double b, double c,
                              double x1, double y1)
{
    double temp = -1 * (a * x1 + b * y1 + c) / (a * a + b * b);
    double x = temp * a + x1;
    double y = temp * b + y1;
    return make_pair(x, y);
}
  
// Driver Code
int main()
{
    // Equation of line is
    // ax + by + c = 0
    double a = 0.0;
    double b = 1.0;
    double c = -2;
  
    // Coordinates of point p(x1, y1).
    double x1 = 3.0;
    double y1 = 3.0;
  
    pair<double, double> foot = findFoot(a, b, c, x1, y1);
    cout << foot.first << " " << foot.second;
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

import javafx.util.Pair;
  
// Java program for implementation of
// the above approach
class GFG 
{
  
// Function to find foot of perpendicular from
// a point in 2 D plane to a Line
static Pair<Double, Double> findFoot(double a, double b, double c,
                            double x1, double y1)
{
    double temp = -1 * (a * x1 + b * y1 + c) / (a * a + b * b);
    double x = temp * a + x1;
    double y = temp * b + y1;
    return new Pair(x, y);
}
  
// Driver Code
public static void main(String[] args) 
{
    // Equation of line is
    // ax + by + c = 0
    double a = 0.0;
    double b = 1.0;
    double c = -2;
  
    // Coordinates of point p(x1, y1).
    double x1 = 3.0;
    double y1 = 3.0;
  
    Pair<Double, Double> foot = findFoot(a, b, c, x1, y1);
    System.out.println(foot.getKey() + " " + foot.getValue());
    }
}
  
// This code contributed by Rajput-Ji

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach 
  
# Function to find foot of perpendicular 
# from a point in 2 D plane to a Line 
def findFoot(a, b, c, x1, y1): 
  
    temp = (-1 * (a * x1 + b * y1 + c) //
                  (a * a + b * b)) 
    x = temp * a + x1 
    y = temp * b + y1 
    return (x, y) 
  
# Driver Code 
if __name__ == "__main__":
  
    # Equation of line is 
    # ax + by + c = 0 
    a, b, c = 0.0, 1.0, -2
      
    # Coordinates of point p(x1, y1). 
    x1, y1 = 3.0, 3.0
  
    foot = findFoot(a, b, c, x1, y1) 
    print(int(foot[0]), int(foot[1])) 
          
# This code is contributed
# by Rituraj Jain

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program for implementation of 
// the above approach 
using System;
  
class GFG 
    // Pair class
    public class Pair
    {
        public double first,second;
        public Pair(double a,double b)
        {
            first = a;
            second = b;
        }
    }
  
// Function to find foot of perpendicular from 
// a point in 2 D plane to a Line 
static Pair findFoot(double a, double b, double c, 
                            double x1, double y1) 
    double temp = -1 * (a * x1 + b * y1 + c) / (a * a + b * b); 
    double x = temp * a + x1; 
    double y = temp * b + y1; 
    return new Pair(x, y); 
  
// Driver Code 
public static void Main(String []args) 
    // Equation of line is 
    // ax + by + c = 0 
    double a = 0.0; 
    double b = 1.0; 
    double c = -2; 
  
    // Coordinates of point p(x1, y1). 
    double x1 = 3.0; 
    double y1 = 3.0; 
  
    Pair foot = findFoot(a, b, c, x1, y1); 
    Console.WriteLine(foot.first + " " + foot.second); 
    
  
// This code contributed by Arnab Kundu

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of the approach 
  
// Function to find foot of perpendicular 
// from a point in 2 D plane to a Line 
function findFoot($a, $b, $c, $x1, $y1)
  
    $temp = floor((-1 * ($a * $x1 + $b * $y1 + $c) /
                        ($a * $a + $b * $b)));
    $x = $temp * $a + $x1;
    $y = $temp * $b + $y1;
    return array($x, $y);
  
}
  
// Driver Code 
  
// Equation of line is 
// ax + by + c = 0 
$a = 0.0;
$b = 1.0 ;
$c = -2 ;
  
// Coordinates of point p(x1, y1). 
$x1 = 3.0 ;
$y1 = 3.0 ;
  
$foot = findFoot($a, $b, $c, $x1, $y1);
echo floor($foot[0]), " ", floor($foot[1]);
  
// This code is contributed by Ryuga
?>

chevron_right


Output:

3 2


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.