কম্পিউটার

C++ এ বৃত্ত এবং আয়তক্ষেত্র ওভারল্যাপিং


ধরুন আমাদের একটি বৃত্ত রয়েছে যাকে (ব্যাসার্ধ, xc, yc) হিসাবে উপস্থাপন করা হয়েছে, এখানে (xc, yc) হল বৃত্তের কেন্দ্র স্থানাঙ্ক। আমাদের কাছে একটি অক্ষ-সারিবদ্ধ আয়তক্ষেত্রও রয়েছে যা (x1, y1, x2, y2) হিসাবে উপস্থাপিত হয়েছে, যেখানে (x1, y1) হল নীচে-বাম কোণের স্থানাঙ্ক এবং (x2, y2) হল উপরের-ডানদিকের স্থানাঙ্ক আয়তক্ষেত্রের কোণে। বৃত্ত এবং আয়তক্ষেত্র ওভারল্যাপ করা হয়েছে কিনা তা আমাদের পরীক্ষা করতে হবে৷

সুতরাং, যদি ইনপুট মত হয়

C++ এ বৃত্ত এবং আয়তক্ষেত্র ওভারল্যাপিং

তাহলে আউটপুট সত্য হবে।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন eval() সংজ্ঞায়িত করুন, এটি a, b, c,

    লাগবে
  • সর্বোচ্চ b এবং সর্বনিম্ন a এবং c

    ফেরত দিন
  • প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -

  • cdx :=eval(cx, বাম, ডান), cdy :=eval(cy, নীচে, উপরে)

  • rwid :=ডান - বাম, rh :=উপরে - নীচে

  • dx :=cx - cdx, dy :=cy - cdy

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

  • sqrRadius :=(r * r)

  • disSq <=sqrRadius, অন্যথায় মিথ্যা

    হলে true ফেরত দিন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#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

  2. C++ এ ডোমিনো এবং ট্রোমিনো টাইলিং

  3. একটি লাইন C++ এ একটি বৃত্ত স্পর্শ করে বা ছেদ করে কিনা তা পরীক্ষা করুন

  4. সি++ এবং সি#-এ ফরিচ