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

C++ में वृत्त और आयत के ओवरलैप की जांच


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

उदाहरण के लिए, यदि इनपुट दिए गए चित्र के अनुसार है, तो आउटपुट true होगा।

हल करने की विधि

हम निम्न चरणों का पालन करेंगे:

  • eval() फ़ंक्शन परिभाषित करें, जो a, b, c लेता है और b के अधिकतम और a व c के न्यूनतम को लौटाता है।
  • मुख्य विधि में:
    • cdx = eval(cx, left, right), cdy = eval(cy, bottom, top) की गणना करें।
    • आयत की चौड़ाई और ऊंचाई की गणना करें।
    • dx = cx - cdx, dy = cy - cdy की गणना करें।
    • दूरी का वर्ग disSq = dx*dx + dy*dy और त्रिज्या का वर्ग sqrRadius = r*r की गणना करें।
    • यदि disSq <= sqrRadius तो true लौटाएं, अन्यथा false।

उदाहरण

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

#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 (Rectangle Area II) - ओवरलैपिंग आयतों का कुल क्षेत्रफल C++ में आयत क्षेत्रफल II (Rectangle Area II) - ओवरलैपिंग आयतों का कुल क्षेत्रफल

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

  1. C++ में डोमिनो और ट्रोमिनो टाइलिंग C++ में डोमिनो और ट्रोमिनो टाइलिंग

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

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

    समस्या विवरण एक वृत्त (केंद्र h,k और त्रिज्या r) और रेखा (ax+by+c=0) दी गई है। जांचें कि रेखा वृत्त को स्पर्श करती है, प्रतिच्छेद करती है, या बाहर है। विधि केंद्र से रेखा की लंबवत दूरी P निकालें: P = |ah + bk + c| / √(a²+b²) P की त्रिज्या r से तुलना करें: r → बाहर P = r → स्पर्श करती है