इस लेख में, हम एक प्रोग्राम पर चर्चा करेंगे जो दिए गए बिंदु को कवर करने वाला सर्वोत्तम फिट आयत ज्ञात करता है।
इस समस्या में, हमें एक बिंदु के निर्देशांक (x,y) और लंबाई/चौड़ाई का अनुपात = l/b (मान लीजिए) दिया जाता है। हमें एक आयत के निर्देशांक ज्ञात करने हैं जिसमें दिया गया बिंदु हो और जिनके आयाम दिए गए अनुपात का पालन करते हों। कई आयत मौजूद होने की स्थिति में, हमें वह चुनना होगा जिसके यूक्लिड केंद्र और दिए गए बिंदु के बीच की दूरी सबसे कम हो।
इसे हल करने के लिए, पहले हम अनुपात l/b को न्यूनतम करेंगे। उसके बाद, हम (n,m) क्षेत्र (अनुमत 2D स्थान) में रहने के लिए min(n/l, m/b) मान ज्ञात करेंगे। पहले, मान लीजिए कि (x,y) हमारे आयत का केंद्र है। यदि नहीं, तो हम लंबाई और चौड़ाई के मानों को एक साथ घटाकर और जोड़कर मूल निर्देशांक ज्ञात करेंगे।
उदाहरण
#include <cmath>
#include <iostream>
using namespace std;
// दिए गए अनुपात के मान को न्यूनतम करने के लिए
int greatest_div(int l, int b) {
if (l == 0)
return b;
else
return greatest_div(b % l, l);
}
// निर्देशांक की गणना करने के लिए
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);
// वह रेंज ज्ञात करना जिसमें दिया गया बिंदु मौजूद है
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 (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