এই প্রবন্ধে, আমরা একটি প্রদত্ত বিন্দু কভার করে এমন সেরা উপযুক্ত আয়তক্ষেত্র খুঁজে বের করার জন্য একটি প্রোগ্রাম নিয়ে আলোচনা করব৷
এই সমস্যায়, আমাদেরকে একটি বিন্দুর স্থানাঙ্ক (x,y) এবং দৈর্ঘ্য/প্রস্থ =l/b (বলুন) অনুপাত দেওয়া হয়েছে। আমাদের একটি আয়তক্ষেত্রের স্থানাঙ্ক খুঁজে বের করতে হবে যাতে প্রদত্ত বিন্দু রয়েছে এবং যার মাত্রা প্রদত্ত অনুপাত অনুসরণ করে। একাধিক আয়তক্ষেত্র বিদ্যমান থাকলে, আমাদেরকে এর ইউক্লিডের কেন্দ্র এবং প্রদত্ত বিন্দুর মধ্যে সবচেয়ে কম দূরত্বের একটি বেছে নিতে হবে।
এটি সমাধান করার জন্য, প্রথমে আমরা l/b অনুপাত কমিয়ে আনব। এর পরে, আমরা (n,m) অঞ্চলে থাকার জন্য min(n/l,m/b) মান খুঁজে পাই (অনুমোদিত 2d স্থান)। প্রথমত, ধরা যাক যে (x,y) শুধুমাত্র আমাদের আয়তক্ষেত্রের কেন্দ্র। যদি তা না হয়, আমরা দৈর্ঘ্য এবং প্রস্থের মান যথাক্রমে বিয়োগ এবং যোগ করে মূল স্থানাঙ্কগুলি খুঁজে পাব।
উদাহরণ
#include <cmath>
#include <iostream>
using namespace std;
//to minimize the value of given ratio
int greatest_div(int l, int b) {
if (l == 0)
return b;
else
return greatest_div(b % l, l);
}
//to calculate the coordinates
void calc_coordinates(int n, int m, int x, int y, int l, int b) {
int k, div1;
int x1, y1, x2, y2;
div1 = greatest_div(l, b);
l /= div1;
b /= div1;
k = min(n / l, m / b);
//finding the range in which the given point exists
x1 = x - (k * l - k * l / 2);
x2 = x + k * l / 2;
y1 = y - (k * b - k * b / 2);
y2 = y + k * b / 2;
//if the coordinates go out of the range
if (x1 < 0){
x2 -= x1;
x1 = 0;
}
if (x2 > n){
x1 -= x2 - n;
x2 = n;
}
if (y1 < 0){
y2 -= y1;
y1 = 0;
}
if (y2 > m) {
y1 -= y2 - m;
y2 = m;
}
cout << "Coordinates : " << x1 << " " << y1 << " " << x2<< " " << y2 << endl;
}
int main() {
int n = 50, m = 20, x = 10, y = 6, l = 4, b = 7;
calc_coordinates(n, m, x, y, l, b);
return 0;
} আউটপুট
Coordinates : 6 0 14 14