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++ 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 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 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# 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
<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)