Open In App

Equation of a straight line with perpendicular distance D from origin and an angle A between the perpendicular from origin and x-axis

Improve
Improve
Like Article
Like
Save
Share
Report

Given two integers D and A representing the perpendicular distance from the origin to a straight line and the angle made by the perpendicular with the positive x-axis respectively, the task is to find the equation of the straight line.

Examples:

Input: D = 10, A = 30 degrees
Output: 0.87x +0.50y = 10

Input: D = 12, A = 45 degrees
Output: 0.71x +0.71y = 12

Approach: The given problem can be solved based on the following observations:

Figure 1

  • Let the perpendicular distance be (p) and the angle between the perpendicular and the positive x-axis be (?) degrees.
  • Consider a point P with coordinates (x, y) on the required line.
  • Draw a perpendicular from P to meet the x-axis at L.
  • From L, draw a perpendicular on OQ at M.
  • Now, draw a perpendicular from P to meet ML at N.

Figure 2

Now consider right triangle OLM
cos ? = OM/OL
OM = OL cos ? = x cos ?            â€” (1)

Now consider right triangle PNL
cos (90 - ?) = PN/PL
sin ? = PN/PL
PN = PL sin ? = y sin ?             
MQ = PN = y sin ?            â€” (2)

Now p = OQ = OM + MQ
Using equations (1) and (2)
p = x cos ? + y sin ?            which is the equation of the required line

Below is the implementation of the above approach :

C++

// C++ program for the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find equation of a line whose
// distance from origin and angle made by the
// perpendicular from origin with x-axis is given
void findLine(int distance, float degree)
{
    // Convert angle from degree to radian
    float x = degree * 3.14159 / 180;
 
    // Handle the special case
    if (degree > 90) {
        cout << "Not Possible";
        return;
    }
 
    // Calculate the sin and cos of angle
    float result_1 = sin(x);
    float result_2 = cos(x);
 
    // Print the equation of the line
    cout << fixed << setprecision(2)
         << result_2 << "x +"
         << result_1 << "y = " << distance;
}
 
// Driver Code
int main()
{
    // Given Input
    int D = 10;
    float A = 30;
 
    // Function Call
    findLine(D, A);
 
    return 0;
}

                    

Java

// Java program for the approach
 
class GFG{
 
// Function to find equation of a line whose
// distance from origin and angle made by the
// perpendicular from origin with x-axis is given
static void findLine(int distance, float degree)
{
    // Convert angle from degree to radian
    float x = (float) (degree * 3.14159 / 180);
 
    // Handle the special case
    if (degree > 90) {
        System.out.print("Not Possible");
        return;
    }
 
    // Calculate the sin and cos of angle
    float result_1 = (float) Math.sin(x);
    float result_2 = (float) Math.cos(x);
 
    // Print the equation of the line
    System.out.print(String.format("%.2f",result_2)+ "x +"
         + String.format("%.2f",result_1)+ "y = " +  distance);
}
 
// Driver Code
public static void main(String[] args)
{
    // Given Input
    int D = 10;
    float A = 30;
 
    // Function Call
    findLine(D, A);
 
}
}
 
// This code is contributed by shikhasingrajput

                    

Python3

# Python3 program for the approach
import math
 
# Function to find equation of a line whose
# distance from origin and angle made by the
# perpendicular from origin with x-axis is given
def findLine(distance, degree):
 
    # Convert angle from degree to radian
    x = degree * 3.14159 / 180
  
    # Handle the special case
    if (degree > 90):
        print("Not Possible")
        return
  
    # Calculate the sin and cos of angle
    result_1 = math.sin(x)
    result_2 = math.cos(x)
  
    # Print the equation of the line
    print('%.2f' % result_2,
          "x +", '%.2f' % result_1,
          "y = ", distance, sep = "")
 
# Driver code
 
# Given Input
D = 10
A = 30
 
# Function Call
findLine(D, A)
 
# This code is contributed by mukesh07

                    

C#

// C# program for the approach
using System;
class GFG
{
     
    // Function to find equation of a line whose
    // distance from origin and angle made by the
    // perpendicular from origin with x-axis is given
    static void findLine(int distance, float degree)
    {
        // Convert angle from degree to radian
        float x = (float)(degree * 3.14159 / 180);
      
        // Handle the special case
        if (degree > 90) {
            Console.WriteLine("Not Possible");
            return;
        }
      
        // Calculate the sin and cos of angle
        float result_1 = (float)(Math.Sin(x));
        float result_2 = (float)(Math.Cos(x));
      
        // Print the equation of the line
        Console.WriteLine(result_2.ToString("0.00") + "x +"
             + result_1.ToString("0.00") + "y = " + distance);
    }
 
  static void Main ()
  {
    // Given Input
    int D = 10;
    float A = 30;
  
    // Function Call
    findLine(D, A);
  }
}
 
// This code is contributed by suresh07.

                    

Javascript

<script>
  
        // JavaScript program for the above approach
 
        // Function to find equation of a line whose
        // distance from origin and angle made by the
        // perpendicular from origin with x-axis is given
        function findLine(distance, degree) {
            // Convert angle from degree to radian
            let x = degree * 3.14159 / 180;
 
            // Handle the special case
            if (degree > 90) {
                document.write("Not Possible");
                return;
            }
 
            // Calculate the sin and cos of angle
            let result_1 = Math.sin(x);
            let result_2 = Math.cos(x);
 
            // Print the equation of the line
            document.write(result_2.toPrecision(2) + "x + "
             + result_1.toPrecision(2) + "y = " + distance);
        }
 
        // Driver Code
 
        // Given Input
        let D = 10;
        let A = 30;
 
        // Function Call
        findLine(D, A);
 
        // This code is contributed by Hritik
         
</script>

                    

Output: 
0.87x +0.50y = 10

 

Time Complexity: O(1)
Auxiliary Space: O(1)


 



Last Updated : 02 Aug, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads