इस लेख में, हम किसी दिए गए बिंदु को कवर करने वाले सबसे उपयुक्त आयत को खोजने के लिए एक कार्यक्रम पर चर्चा करेंगे।
इस समस्या में, हमें एक बिंदु (x, y) के निर्देशांक और लंबाई/चौड़ाई का अनुपात =l/b (मान लीजिए) दिया जाता है। हमें एक आयत के निर्देशांक ज्ञात करने हैं जिसमें दिए गए बिंदु हैं और जिनकी विमाएँ दिए गए अनुपात का अनुसरण करती हैं। कई आयत मौजूद होने की स्थिति में, हमें उसके यूक्लिड के केंद्र और दिए गए बिंदु के बीच सबसे कम दूरी वाले को चुनना होगा।
इसे हल करने के लिए, पहले हम अनुपात l/b को न्यूनतम करेंगे। उसके बाद, हम (n,m) क्षेत्र (अनुमत 2d स्थान) में रहने के लिए min(n/l,m/b) मान पाते हैं। सबसे पहले, मान लीजिए कि (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