📜  求从给定的外部点到圆的切线之间的角度

📅  最后修改于: 2021-10-23 09:01:43             🧑  作者: Mango

给定一个正整数R表示圆的半径和圆心(X1, Y1)以及笛卡尔平面中的另一个点(X2, Y2) ,任务是找到从将(X2, Y2)指向圆。

例子:

方法:根据以下观察可以解决给定的问题:

  • 半径与切线和圆的接触点处的切线成90 度角。此外,一对切线 (θ) 所对角度被连接圆心和外点的线平分。
  • 因此,中心和外部点之间的距离可以使用距离公式计算为:

因此,使用上面的公式,可以计算从点(X2,Y2)到圆的切线对之间的角度。

下面是上述方法的实现:

C++
// C++ program for the above approach
 
#include 
#include 
using namespace std;
 
// Function to find the distance between
// center and the exterior point
double point_distance(int x1, int y1,
                      int x2, int y2)
{
    // Find the difference between
    // the x and y coordinates
    int p = (x2 - x1);
    int q = (y2 - y1);
 
    // Using the distance formula
    double distance = sqrt(p * p
                           + q * q);
 
    return distance;
}
 
// Function to find the angle between
// the pair of tangents drawn from the
// point (X2, Y2) to the circle.
void tangentAngle(int x1, int y1,
                  int x2, int y2,
                  double radius)
{
    // Calculate the distance between
    // the center and exterior point
    double distance = point_distance(
        x1, y1, x2, y2);
 
    // Invalid Case
    if (radius / distance > 1
        || radius / distance < -1) {
        cout << -1;
    }
 
    // Find the angle using the formula
    double result
        = 2 * asin(radius / distance) * 180
          / 3.1415;
 
    // Print the resultant angle
    cout << result << " degrees";
}
 
// Driver Code
int main()
{
    int radius = 4;
    int x1 = 7, y1 = 12;
    int x2 = 3, y2 = 4;
    tangentAngle(x1, y1, x2, y2, radius);
 
    return 0;
}


Java
// java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG
{
   
// Function to find the distance between
// center and the exterior point
static double point_distance(int x1, int y1,
                      int x2, int y2)
{
    // Find the difference between
    // the x and y coordinates
    int p = (x2 - x1);
    int q = (y2 - y1);
  
    // Using the distance formula
    double distance = Math.sqrt(p * p
                           + q * q);
  
    return distance;
}
  
// Function to find the angle between
// the pair of tangents drawn from the
// point (X2, Y2) to the circle.
static void tangentAngle(int x1, int y1,
                  int x2, int y2,
                  double radius)
{
   
    // Calculate the distance between
    // the center and exterior point
    double distance = point_distance(
        x1, y1, x2, y2);
  
    // Invalid Case
    if (radius / distance > 1
        || radius / distance < -1) {
         System.out.println(-1);
    }
  
    // Find the angle using the formula
    double result
        = 2 * Math.asin(radius / distance) * 180
          / 3.1415;
  
    // Print the resultant angle
    System.out.println(String.format("%.4f", result) + " degrees");
}
   
    // Driver Code
    public static void main(String[] args)
    {
 
    int radius = 4;
    int x1 = 7, y1 = 12;
    int x2 = 3, y2 = 4;
    tangentAngle(x1, y1, x2, y2, radius);
    }
}
 
// This code is contributed by susmitakundugoaldanga.


Python3
# Python 3 program for the above approach
import math
 
# Function to find the distance between
# center and the exterior point
def point_distance(x1, y1,
                   x2,  y2):
 
    # Find the difference between
    # the x and y coordinates
    p = (x2 - x1)
    q = (y2 - y1)
 
    # Using the distance formula
    distance = math.sqrt(p * p
                         + q * q)
 
    return distance
 
# Function to find the angle between
# the pair of tangents drawn from the
# point (X2, Y2) to the circle.
def tangentAngle(x1,  y1,
                 x2,  y2,
                 radius):
 
    # Calculate the distance between
    # the center and exterior point
    distance = point_distance(
        x1, y1, x2, y2)
 
    # Invalid Case
    if (radius / distance > 1
            or radius / distance < -1):
        print(-1)
 
    # Find the angle using the formula
    result = 2 * math.asin(radius / distance) * 180 / 3.1415
 
    # Print the resultant angle
    print(result, " degrees")
 
# Driver Code
if __name__ == "__main__":
 
    radius = 4
    x1 = 7
    y1 = 12
    x2 = 3
    y2 = 4
    tangentAngle(x1, y1, x2, y2, radius)
 
    # This code is contributed by ukasp.


C#
// C# program for the above approach
using System;
 
class GFG{
 
// Function to find the distance between
// center and the exterior point
static double point_distance(int x1, int y1,
                             int x2, int y2)
{
     
    // Find the difference between
    // the x and y coordinates
    int p = (x2 - x1);
    int q = (y2 - y1);
 
    // Using the distance formula
    double distance = Math.Sqrt(p * p + q * q);
 
    return distance;
}
 
// Function to find the angle between
// the pair of tangents drawn from the
// point (X2, Y2) to the circle.
static void tangentAngle(int x1, int y1, int x2,
                         int y2, double radius)
{
 
    // Calculate the distance between
    // the center and exterior point
    double distance = point_distance(x1, y1, x2, y2);
 
    // Invalid Case
    if (radius / distance > 1 ||
        radius / distance < -1)
    {
        Console.WriteLine(-1);
    }
 
    // Find the angle using the formula
    double result = 2 * Math.Asin(
               radius / distance) *
                  180 / 3.1415;
 
    // Print the resultant angle
    Console.WriteLine(
        String.Format("{0:0.0000}", result) +
                      " degrees");
}
 
// Driver code
static void Main()
{
    int radius = 4;
    int x1 = 7, y1 = 12;
    int x2 = 3, y2 = 4;
     
    tangentAngle(x1, y1, x2, y2, radius);
}
}
 
// This code is contributed by abhinavjain194


Javascript


输出:
53.1317 degrees

时间复杂度: O(1)
辅助空间: O(1)

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程