Equation of a normal to a Circle from a given point
Given three integers a, b, c representing coefficients of the equation x2 + y2 + ax + by + c = 0 of a circle, the task is to find the equation of the normal to the circle from a given point (x1, y1).
Note: Normal is a line perpendicular to the tangent at the point of contact between the tangent and the curve.
Examples:
Input: a = 4, b = 6, c = 5, x1 = 12, y1 = 14
Output: y = 1.1x + 0.8Input: a = 6, b = 12, c = 5, x1 = 9, y1 = 3
Output: y = -0.5x + 7.5
Approach: Follow the steps below to solve the problem:
- The normal to a circle passes through the center of the circle.
- Therefore, find the coordinates of the center of the circle (g, f), where g = a/2 and f = b/2.
- Since the center of the circle and the point where the normal is drawn lie on the normal, calculate the slope of the normal (m) as m = (y1 – f) / (x1 – g).
- Hence, the equation of the normal is y – y1 = m * (x – x1).
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to calculate the slope double normal_slope( double a, double b, double x1, double y1) { // Store the coordinates of // the center of the circle double g = a / 2; double f = b / 2; // If slope becomes infinity if (g - x1 == 0) return (-1); // Stores the slope double slope = (f - y1) / (g - x1); // If slope is zero if (slope == 0) return (-2); // Return the result return slope; } // Function to find the equation of the // normal to a circle from a given point void normal_equation( double a, double b, double x1, double y1) { // Stores the slope of the normal double slope = normal_slope(a, b, x1, y1); // If slope becomes infinity if (slope == -1) { cout << "x = " << x1; } // If slope is zero if (slope == -2) { cout << "y = " << y1; } // Otherwise, print the // equation of the normal if (slope != -1 && slope != -2) { x1 *= -slope; x1 += y1; if (x1 > 0) cout << "y = " << slope << "x + " << x1; else cout << "y = " << slope << "x " << x1; } } // Driver Code int main() { // Given Input int a = 4, b = 6, c = 5; int x1 = 12, y1 = 14; // Function Call normal_equation(a, b, x1, y1); return 0; } |
Java
// Java program for the above approach import java.util.*; class GFG{ // Function to calculate the slope static double normal_slope( double a, double b, double x1, double y1) { // Store the coordinates of // the center of the circle double g = a / 2 ; double f = b / 2 ; // If slope becomes infinity if (g - x1 == 0 ) return (- 1 ); // Stores the slope double slope = (f - y1) / (g - x1); // If slope is zero if (slope == 0 ) return (- 2 ); // Return the result return slope; } // Function to find the equation of the // normal to a circle from a given point static void normal_equation( double a, double b, double x1, double y1) { // Stores the slope of the normal double slope = normal_slope(a, b, x1, y1); // If slope becomes infinity if (slope == - 1 ) { System.out.print( "x = " + x1); } // If slope is zero if (slope == - 2 ) { System.out.print( "y = " + y1); } // Otherwise, print the // equation of the normal if (slope != - 1 && slope != - 2 ) { x1 *= -slope; x1 += y1; if (x1 > 0 ) System.out.print( "y = " + slope + "x + " + x1); else System.out.print( "y = " + slope + "x " + x1); } } // Driver Code public static void main(String[] args) { // Given Input int a = 4 , b = 6 ; int x1 = 12 , y1 = 14 ; // Function Call normal_equation(a, b, x1, y1); } } // This code is contributed by 29AjayKumar |
Python3
# Python3 program for the above approach # Function to calculate the slope def normal_slope(a, b, x1, y1): # Store the coordinates # the center of the circle g = a / 2 f = b / 2 # If slope becomes infinity if (g - x1 = = 0 ): return ( - 1 ) # Stores the slope slope = (f - y1) / (g - x1) # If slope is zero if (slope = = 0 ): return ( - 2 ) # Return the result return slope # Function to find the equation of the # normal to a circle from a given point def normal_equation(a, b, x1, y1): # Stores the slope of the normal slope = normal_slope(a, b, x1, y1) # If slope becomes infinity if (slope = = - 1 ) : print ( "x = " , x1) # If slope is zero if (slope = = - 2 ) : print ( "y = " , y1) # Otherwise, print the # equation of the normal if (slope ! = - 1 and slope ! = - 2 ): x1 * = - slope x1 + = y1 if (x1 > 0 ) : print ( "y = " , slope, "x + " , x1) else : print ( "y = " , slope, "x " , x1) # Driver Code # Given Input a = 4 b = 6 c = 5 x1 = 12 y1 = 14 # Function Call normal_equation(a, b, x1, y1) # This code is contributed by Dharanendra L V. |
C#
// C# program for the above approach using System; class GFG{ // Function to calculate the slope static double normal_slope( double a, double b, double x1, double y1) { // Store the coordinates of // the center of the circle double g = a / 2; double f = b / 2; // If slope becomes infinity if (g - x1 == 0) return (-1); // Stores the slope double slope = (f - y1) / (g - x1); // If slope is zero if (slope == 0) return (-2); // Return the result return slope; } // Function to find the equation of the // normal to a circle from a given point static void normal_equation( double a, double b, double x1, double y1) { // Stores the slope of the normal double slope = normal_slope(a, b, x1, y1); // If slope becomes infinity if (slope == -1) { Console.WriteLine( "x = " + x1); } // If slope is zero if (slope == -2) { Console.WriteLine( "y = " + y1); } // Otherwise, print the // equation of the normal if (slope != -1 && slope != -2) { x1 *= -slope; x1 += y1; if (x1 > 0) Console.WriteLine( "y = " + slope + "x +" + Math.Round(x1, 2)); else Console.WriteLine( "y = " + slope + "x " + Math.Round(x1, 2)); } } // Driver code public static void Main(String []args) { // Given Input int a = 4, b = 6; //int c = 5; int x1 = 12, y1 = 14; // Function Call normal_equation(a, b, x1, y1); } } // This code is contributed by sanjoy_62 |
Javascript
<script> // JavaScript program for the above approach // Function to calculate the slope function normal_slope( a, b, x1, y1) { // Store the coordinates of // the center of the circle var g = a / 2; var f = b / 2; // If slope becomes infinity if (g - x1 == 0) return (-1); // Stores the slope var slope = (f - y1) / (g - x1); // If slope is zero if (slope == 0) return (-2); // Return the result return slope; } // Function to find the equation of the // normal to a circle from a given point function normal_equation( a, b, x1, y1) { // Stores the slope of the normal var slope = normal_slope(a, b, x1, y1); // If slope becomes infinity if (slope == -1) { document.write( "x = " + x1); } // If slope is zero if (slope == -2) { document.write( "y = " + y1); } // Otherwise, print the // equation of the normal if (slope != -1 && slope != -2) { x1 *= -slope; x1 += y1; if (x1 > 0) document.write( "y = " + slope + "x + " + x1.toFixed(1) ); else document.write( "y = " + slope+ "x " + x1.toFixed(1) ); } } // Driver Code // Given Input var a = 4, b = 6, c = 5; var x1 = 12, y1 = 14; // Function Call normal_equation(a, b, x1, y1); </script> |
Output:
y = 1.1x + 0.8
Time Complexity: O(1)
Auxiliary Space: O(1)
Please Login to comment...