Pārbaudiet, vai divi dotie apļi saskaras vai krustojas viens ar otru

Pārbaudiet, vai divi dotie apļi saskaras vai krustojas viens ar otru
Izmēģiniet to GfG Practice #practiceLinkDiv { display: none !important; }

Ir divi apļi A un B ar to centriem C1(x1 y1) un C2(x2y2) un rādiuss R1 un R2 . Uzdevums ir pārbaudīt, vai abi apļi A un B pieskaras viens otram vai nē.

Piemēri:   

Ievade: C1 = (3 4)
        C2 = (14 18)
        R1 = 5 R2 = 8
Izvade: Apļi nepieskaras viens otram.

Ievade: C1 = (2 3)
        C2 = (15 28)
        R1 = 12 R2 = 10
Izvade: Apļi krustojas viens ar otru.

Ievade: C1 = (-10 8)
        C2 = (14–24)
        R1 = 30 R2 = 10

Ieteicamā praksePārbaudiet, vai divi dotie apļi pieskaras viens otram Izmēģiniet to!

Pieeja:
Attālums starp centriem C1 un C2 tiek aprēķināts kā

 C1C2 = kvadrāts((x1 - x2) 2+ (y1 - y2) 2 ).

Ir trīs nosacījumi, kas rodas.

  1. Ja C1C2 <= R1 - R2: Aplis B atrodas A iekšpusē.
  2. Ja C1C2 <= R2 - R1: Aplis A atrodas B iekšpusē.
  3. Ja C1C2 < R1 + R2: Aplis krustojas viens ar otru.
  4. Ja C1C2 == R1 + R2: Aplis A un B saskaras viens ar otru.
  5. Citādi Aplis A un B nepārklājas

Tālāk ir aprakstīta iepriekš minētās pieejas īstenošana. 

C++
   // C++ program to check if two   // circles touch each other or not.   #include          using     namespace     std  ;   int     circle  (  int     x1       int     y1       int     x2       int     y2       int     r1       int     r2  )   {      double     d     =     sqrt  ((  x1     -     x2  )     *     (  x1     -     x2  )      +     (  y1     -     y2  )     *     (  y1     -     y2  ));      if     (  d      <=     r1     -     r2  )     {      cout      < <     'Circle B is inside A'  ;      }      else     if     (  d      <=     r2     -     r1  )     {      cout      < <     'Circle A is inside B'  ;      }      else     if     (  d      <     r1     +     r2  )     {      cout      < <     'Circle intersect to each other'  ;      }      else     if     (  d     ==     r1     +     r2  )     {      cout      < <     'Circle touch to each other'  ;      }      else     {      cout      < <     'Circle not touch to each other'  ;      }   }   // Driver code   int     main  ()   {      int     x1     =     -10       y1     =     8  ;      int     x2     =     14       y2     =     -24  ;      int     r1     =     30       r2     =     10  ;      circle  (  x1       y1       x2       y2       r1       r2  );      return     0  ;   }   
Java
   // Java program to check if two   // circles touch each other or not.   import     java.io.*  ;   class   GFG     {      static     void     circle  (  int     x1       int     y1       int     x2       int     y2        int     r1       int     r2  )      {      double     d     =     Math  .  sqrt  ((  x1     -     x2  )     *     (  x1     -     x2  )      +     (  y1     -     y2  )     *     (  y1     -     y2  ));      if     (  d      <=     r1     -     r2  )     {      System  .  out  .  println  (  'Circle B is inside A'  );      }      else     if     (  d      <=     r2     -     r1  )     {      System  .  out  .  println  (  'Circle A is inside B'  );      }      else     if     (  d      <     r1     +     r2  )     {      System  .  out  .  println  (  'Circle intersect'      +     ' to each other'  );      }      else     if     (  d     ==     r1     +     r2  )     {      System  .  out  .  println  (  'Circle touch to'      +     ' each other'  );      }      else     {      System  .  out  .  println  (  'Circle not touch'      +     ' to each other'  );      }      }      // Driver code      public     static     void     main  (  String  []     args  )      {      int     x1     =     -  10       y1     =     8  ;      int     x2     =     14       y2     =     -  24  ;      int     r1     =     30       r2     =     10  ;      circle  (  x1       y1       x2       y2       r1       r2  );      }   }   // This article is contributed by vt_m.   
Python
   # Python program to check if two   # circles touch each other or not.   import   math   # Function to check if two circles touch each other   def   circle  (  x1     y1     x2     y2     r1     r2  ):   d   =   math  .  sqrt  ((  x1   -   x2  )   *   (  x1   -   x2  )   +   (  y1   -   y2  )   *   (  y1   -   y2  ))   if  (  d    <=   r1   -   r2  ):   print  (  'Circle B is inside A'  )   elif  (  d    <=   r2   -   r1  ):   print  (  'Circle A is inside B'  )   elif  (  d    <   r1   +   r2  ):   print  (  'Circle intersect to each other'  )   elif  (  d   ==   r1   +   r2  ):   print  (  'Circle touch to each other'  )   else  :   print  (  'Circle not touch to each other'  )   # Driver code   x1     y1   =   -  10     8   x2     y2   =   14     -  24   r1     r2   =   30     10   # Function call   circle  (  x1     y1     x2     y2     r1     r2  )   # This code is contributed by Aman Kumar   
C#
   // C# program to check if two   // circles touch each other or not.   using     System  ;   class     GFG     {      static     void     circle  (  int     x1       int     y1       int     x2       int     y2        int     r1       int     r2  )      {      double     d     =     Math  .  Sqrt  ((  x1     -     x2  )     *     (  x1     -     x2  )      +     (  y1     -     y2  )     *     (  y1     -     y2  ));      if     (  d      <=     r1     -     r2  )     {      Console  .  Write  (  'Circle B is inside A'  );      }      else     if     (  d      <=     r2     -     r1  )     {      Console  .  Write  (  'Circle A is inside B'  );      }      else     if     (  d      <     r1     +     r2  )     {      Console  .  Write  (  'Circle intersect'      +     ' to each other'  );      }      else     if     (  d     ==     r1     +     r2  )     {      Console  .  Write  (  'Circle touch to'      +     ' each other'  );      }      else     {      Console  .  Write  (  'Circle not touch'      +     ' to each other'  );      }      }      // Driver code      public     static     void     Main  (  String  []     args  )      {      int     x1     =     -  10       y1     =     8  ;      int     x2     =     14       y2     =     -  24  ;      int     r1     =     30       r2     =     10  ;      circle  (  x1       y1       x2       y2       r1       r2  );      }   }   // This article is contributed by Pushpesh Raj.   
JavaScript
   // JavaScript program to check if two circles touch each other or not.   function     circle  (  x1       y1       x2       y2       r1       r2  )     {      var     d     =     Math  .  sqrt  ((  x1     -     x2  )     *     (  x1     -     x2  )     +     (  y1     -     y2  )     *     (  y1     -     y2  ));      if     (  d      <=     r1     -     r2  )     {      console  .  log  (  'Circle B is inside A'  );      }     else     if     (  d      <=     r2     -     r1  )     {      console  .  log  (  'Circle A is inside B'  );      }     else     if     (  d      <     r1     +     r2  )     {      console  .  log  (  'Circle intersect to each other'  );      }     else     if     (  d     ===     r1     +     r2  )     {      console  .  log  (  'Circle touch to each other'  );      }     else     {      console  .  log  (  'Circle not touch to each other'  );      }   }   // Driver code   var     x1     =     -  10       y1     =     8  ;   var     x2     =     14       y2     =     -  24  ;   var     r1     =     30       r2     =     10  ;   circle  (  x1       y1       x2       y2       r1       r2  );   // this code is contributed by devendra   

Izvade
Circle touch to each other 

Laika sarežģītība: O(log(n)), jo tiek izmantota iebūvētā sqrt funkcija 
Palīgtelpa: O(1)


Šī raksta autors ir Aarti_Rathi un Dharmendra Kumar .

Izveidojiet viktorīnu