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