Equation of parabola from its focus and directrix - GeeksforGeeks

20 Sep, 2021
We are given focus(x, y) and directrix(ax + by + c) of a parabola and we have to find the equation of parabola using its focus and directrix.Examples :  
Input: x1 = 0, y1 = 0, a = 2, b = 1, c = 2 Output: equation of parabola is 16.0 x^2 + 9.0 y^2 + -12.0 x + 16.0 y + 24.0 xy + -4.0 = 0.Input: x1 = -1, y1 = -2, a = 1, b = -2, c = 3 Output:equation of parabola is 4.0 x^2 + 1.0 y^2 + 4.0 x + 32.0 y + 4.0 xy + 16.0 = 0. 
 
 
Let P(x, y) be any point on the parabola whose focus S(x1, y1) and the directrix is the straight line ax + by + c =0. Draw PM perpendicular from P on the directrix. then by definition pf parabola distance SP = PM SP^2 = PM^2  
(x - x1)^2 + (y - y1)^2 = ( ( a*x + b*y + c ) / (sqrt( a*a + b*b )) ) ^ 2
// let ( a*a + b*b ) = t  
x^2 + x1^2 - 2*x1*x + y^2 + y1^2 - 2*y1*y  = ( ( a*x + b*y + c ) ^ 2 )/ t
on cross multiplying above we get  
t*x^2 + t*x1^2 - 2*t*x1*x + t*y^2 + t*y1^2 - 2*t*y1*y  = ( ( a*x + b*y + c ) ^ 2 )  
t*x^2 + t*x1^2 - 2*t*x1*x + t*y^2 + t*y1^2 - 2*t*y1*y  = a^2*x^2 + b^2*y^2 + 2*a*x*b*y + c^2 + 2*c*(a*x + b*y)
t*x^2 + t*x1^2 - 2*t*x1*x + t*y^2 + t*y1^2 - 2*t*y1*y  = a^2*x^2 + b^2*y^2 + 2*a*x*b*y + c^2 + 2*c*a*x + 2*c*b*y
t*x^2 - a^2*x^2 +  t*y^2 - b^2*y^2 - 2*t*x1*x - 2*c*a*x - 2*t*y1*y - 2*c*b*y - 2*a*x*b*y - c^2  + t*x1^2 + t*y1^2 =0.
This can be compared with general form that is  
a*x^2 + 2*h*x*y + b*y^2 + 2*g*x + 2*f*y + c = 0.
Below is the implementation of the above :  
C++
Java
Python3
C#
Javascript
// C++ program to find equation of a parbola// using focus and directrix.#include <bits/stdc++.h>#include <iomanip>#include <iostream>#include <math.h> using namespace std; // Function to find equation of parabola.void equation_parabola(float x1, float y1,                       float a, float b, float c){    float t = a * a + b * b;    float a1 = t - (a * a);    float b1 = t - (b * b);    float c1 = (-2 * t * x1) - (2 * c * a);    float d1 = (-2 * t * y1) - (2 * c * b);    float e1 = -2 * a * b;    float f1 = (-c * c) + (t * x1 * x1) + (t * y1 * y1);    std::cout << std::fixed;    std::cout << std::setprecision(1);    cout << "equation of parabola is " << a1         << " x^2 + " << b1 << " y^2 + "         << c1 << " x + " << d1 << " y + "         << e1 << " xy + " << f1 << " = 0.";} // Driver Codeint main(){    float x1 = 0;    float y1 = 0;    float a = 3;    float b = -4;    float c = 2;    equation_parabola(x1, y1, a, b, c);    return 0;}// This code is contributed by Amber_Saxena.
// Java program to find equation of a parbola// using focus and directrix.import java.util.*; class solution{ //Function to find equation of parabola.static void equation_parabola(float x1, float y1,                    float a, float b, float c){    float t = a * a + b * b;    float a1 = t - (a * a);    float b1 = t - (b * b);    float c1 = (-2 * t * x1) - (2 * c * a);    float d1 = (-2 * t * y1) - (2 * c * b);    float e1 = -2 * a * b;    float f1 = (-c * c) + (t * x1 * x1) + (t * y1 * y1);    System.out.println( "equation of parabola is "+ a1+                        " x^2 + " +b1 +" y^2 + "+                        c1 + " x + " +d1 + " y + "                        + e1+" xy + " + f1 +" = 0."); } // Driver Codepublic static void main(String arr[]){    float x1 = 0;    float y1 = 0;    float a = 3;    float b = -4;    float c = 2;    equation_parabola(x1, y1, a, b, c); } }
# Python3 program to find equation of a parbola# using focus and directrix. # Function to find equation of parabola.def equation_parabola(x1, y1, a, b, c) :      t = a * a + b * b    a1 = t - (a * a)    b1 = t - (b * b);    c1 = (-2 * t * x1) - (2 * c * a)    d1 = (-2 * t * y1) - (2 * c * b)    e1 = -2 * a * b    f1 = (-c * c) + (t * x1 * x1) + (t * y1 * y1)    print("equation of parabola is", a1 ,"x^2 +" ,b1,    "y^2 +",c1,"x +", d1,"y + ",e1 ,"xy +",f1,"= 0.")  # Driver Codeif __name__ == "__main__" :     x1, y1, a, b, c = 0,0,3,-4,2    equation_parabola(x1, y1, a, b, c) # This code is contributed by Ryuga
// C# program to find equation of a parbola// using focus and directrix.using System; class solution{ //Function to find equation of parabola.static void equation_parabola(float x1, float y1,                    float a, float b, float c){    float t = a * a + b * b;    float a1 = t - (a * a);    float b1 = t - (b * b);    float c1 = (-2 * t * x1) - (2 * c * a);    float d1 = (-2 * t * y1) - (2 * c * b);    float e1 = -2 * a * b;    float f1 = (-c * c) + (t * x1 * x1) + (t * y1 * y1);    Console.WriteLine( "equation of parabola is "+ a1+                        " x^2 + " +b1 +" y^2 + "+                        c1 + " x + " +d1 + " y + "                        + e1+" xy + " + f1 +" = 0."); } // Driver Codepublic static void Main(){    float x1 = 0;    float y1 = 0;    float a = 3;    float b = -4;    float c = 2;    equation_parabola(x1, y1, a, b, c); // This Code is contributed// by shs} }
<script>// javascript program to find equation of a parbola// using focus and directrix.     // Function to find equation of parabola.    function equation_parabola(x1 , y1 , a , b , c) {        var t = a * a + b * b;        var a1 = t - (a * a);        var b1 = t - (b * b);        var c1 = (-2 * t * x1) - (2 * c * a);        var d1 = (-2 * t * y1) - (2 * c * b);        var e1 = -2 * a * b;        var f1 = (-c * c) + (t * x1 * x1) + (t * y1 * y1);        document.write("equation of parabola is " + a1 + " x^2 + " + b1 + " y^2 + " + c1 + " x + " + d1 + " y + "                + e1 + " xy + " + f1 + " = 0.");     }     // Driver Code        var x1 = 0;        var y1 = 0;        var a = 3;        var b = -4;        var c = 2;        equation_parabola(x1, y1, a, b, c); // This code contributed by gauravrajput1</script>
equation of parabola is 16.0 x^2 + 9.0 y^2 + -12.0 x + 16.0 y + 24.0 xy + -4.0 = 0.
 
SURENDRA_GANGWAR
Shashank12
ankthon
GauravRajput1
Algebra
Geometric
Misc
Misc
Misc
Geometric
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Convex Hull using Divide and Conquer Algorithm
Orientation of 3 ordered points
Equation of circle when three points on the circle are given
Program to find slope of a line
Program to find line passing through 2 Points
Top 10 algorithms in Interview Questions
vector::push_back() and vector::pop_back() in C++ STL
Overview of Data Structures | Set 1 (Linear Data Structures)
How to write Regular Expressions?
fgets() and gets() in C language