मान लीजिए कि हमारे पास एक वृत्त है जिसे (त्रिज्या, xc, yc) के रूप में दर्शाया गया है, यहाँ (xc, yc) वृत्त का केंद्र निर्देशांक है। हमारे पास एक अक्ष-संरेखित आयत भी है जिसे (x1, y1, x2, y2) के रूप में दर्शाया गया है, जहाँ (x1, y1) निचले-बाएँ कोने के निर्देशांक हैं, और (x2, y2) शीर्ष-दाएँ के निर्देशांक हैं आयत का कोना। हमें यह जांचना होगा कि वृत्त और आयत अतिव्याप्त हैं या नहीं।
तो, अगर इनपुट पसंद है
तब आउटपुट सही होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक फ़ंक्शन को परिभाषित करें 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