تحقق مما إذا كانت الدائرتان المعطاتان تتلامسان أو تتقاطعان مع بعضهما البعض

تحقق مما إذا كانت الدائرتان المعطاتان تتلامسان أو تتقاطعان مع بعضهما البعض
جربه على ممارسة GfG #practiceLinkDiv { العرض: لا شيء! مهم؛ }

هناك دائرتان A وB مع مركزيهما C1(x1y1) و C2(x2y2) ونصف القطر ر1 و R2 . المهمة هي التحقق من أن الدائرتين A و B تلمسان بعضهما البعض أم لا.

أمثلة :   

مدخل : ج1 = (4 3)
        ج2 = (14 18)
        ر1 = 5 ر2 = 8
الإخراج : الدوائر لا تلمس بعضها البعض.

مدخل : ج1 = (2 3)
        ج2 = (15 28)
        ر1 = 12 ر2 = 10
الإخراج : الدوائر تتقاطع مع بعضها البعض.

مدخل : C1 = (-10 8)
        ج2 = (14 -24)
        ر1 = 30 ر2 = 10

الممارسة الموصى بها: تحقق مما إذا كانت دائرتان معينتان تلمسان بعضهما البعض، جربها!

يقترب:
يتم حساب المسافة بين المراكز C1 و C2 على النحو التالي

 C1C2 = sqrt((x1 - x2) 2+ (ص1 - ص2) 2 ).

هناك ثلاثة شروط تنشأ.

  1. لو C1C2 <= R1 - R2: الدائرة B تقع داخل A.
  2. لو C1C2 <= R2 - R1: الدائرة A تقع داخل B.
  3. لو C1C2 < R1 + R2: الدائرة تتقاطع مع بعضها البعض.
  4. لو C1C2 == R1 + R2: الدائرة A و B على اتصال مع بعضهما البعض.
  5. خلاف ذلك الدائرة A و B لا تتداخل

وفيما يلي تنفيذ النهج المذكور أعلاه: 

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   

الإخراج
Circle touch to each other 

تعقيد الوقت: O(log(n)) بسبب استخدام وظيفة sqrt المضمنة 
المساحة المساعدة: يا(1)


هذه المقالة ساهم بها آرتي_راثي و دارمندرا كومار .

إنشاء اختبار