Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में वृत्त और आयत ओवरलैपिंग

मान लीजिए कि हमारे पास एक वृत्त है जिसे (त्रिज्या, xc, yc) के रूप में दर्शाया गया है, यहाँ (xc, yc) वृत्त का केंद्र निर्देशांक है। हमारे पास एक अक्ष-संरेखित आयत भी है जिसे (x1, y1, x2, y2) के रूप में दर्शाया गया है, जहाँ (x1, y1) निचले-बाएँ कोने के निर्देशांक हैं, और (x2, y2) शीर्ष-दाएँ के निर्देशांक हैं आयत का कोना। हमें यह जांचना होगा कि वृत्त और आयत अतिव्याप्त हैं या नहीं।

तो, अगर इनपुट पसंद है

C++ में वृत्त और आयत ओवरलैपिंग

तब आउटपुट सही होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक फ़ंक्शन को परिभाषित करें eval(), इसमें a, b, c,

    लगेगा
  • अधिकतम बी और न्यूनतम ए और सी की वापसी करें

  • मुख्य विधि से, निम्न कार्य करें -

  • cdx:=eval(cx, बाएँ, दाएँ), cdy:=eval(cy, नीचे, ऊपर)

  • rwid:=दाएँ-बाएँ, rh:=ऊपर-नीचे

  • डीएक्स:=सीएक्स - सीडीएक्स, डीई:=साइ - सीडीई

  • disSq :=(dx * dx) + (dy * dy)

  • sqrRadius:=(आर * आर)

  • सही वापस लौटें जब disSq <=sqrRadius, अन्यथा गलत

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int eval(int a, int b, int c){
      return max(b, min(a, c));
   }
   bool checkOverlap(int r, int cx, int cy, int left, int bottom, int right, int top){
      double cdx = eval(cx, left, right);
      double cdy = eval(cy, bottom, top);
      double rwid = right - left;
      double rh = top - bottom;
      double dx = cx - cdx;
      double dy = cy - cdy;
      double disSq = (dx * dx) + (dy * dy);
      double sqrRadius = (r * r);
      return (disSq <= sqrRadius);
   }
};
main(){
   Solution ob;
   cout << (ob.checkOverlap(1, 0, 0, 1, -1, 3, 1));
}

इनपुट

1, 0, 0, 1, -1, 3, 1

आउटपुट

1

  1. C++ में आयत क्षेत्र II

    मान लीजिए कि हमारे पास (अक्ष-संरेखित) आयतों की एक सूची है। यहाँ प्रत्येक आयत [i] ={x1, y1, x2, y2}, जहाँ (x1, y1) निचले-बाएँ कोने का बिंदु है, और (x2, y2) ऊपरी-दाएँ कोने के बिंदु हैं आयत। हमें समतल में सभी आयतों द्वारा कवर किया गया कुल क्षेत्रफल ज्ञात करना है। उत्तर बहुत हो सकता है, इसलिए हम मॉड्यू

  1. डोमिनोज़ और ट्रोमिनो टाइलिंग सी++ . में

    मान लीजिए कि हमारे पास दो प्रकार की आकृतियाँ हैं, डोमिनोज़ और ट्रोमिनो। उन्हें नीचे की तरह घुमाया जा सकता है - एक टाइलिंग में, प्रत्येक वर्ग को एक टाइल से ढंकना चाहिए। यहां दो टाइलिंग अलग-अलग हैं यदि और केवल तभी जब बोर्ड पर दो 4-प्रत्यक्ष रूप से आसन्न कोशिकाएं हों, जैसे कि टाइलिंग में से एक में द

  1. जाँच करें कि कोई रेखा C++ में वृत्त को स्पर्श करती है या प्रतिच्छेद करती है

    मान लीजिए हमारे पास एक वृत्त और दूसरी सीधी रेखा है। हमारा कार्य यह पता लगाना है कि रेखा वृत्त को स्पर्श करती है या उसे काटती है, अन्यथा वह बाहर से होकर गुजरती है। तो नीचे की तरह तीन अलग-अलग मामले हैं - यहां हम इसे निम्नलिखित चरणों द्वारा हल करेंगे। ये नीचे की तरह हैं - केंद्र के बीच लंबवत P ढूंढ